- 浏览: 45720 次
- 性别:
- 来自: 上海
博客专栏
-
设计模式
浏览量:29895
最新评论
-
java_cache:
给点个赞,通俗易懂
2.设计模式之单例模式 -
打不死小神童:
...
4.设计模式之策略模式 -
yt_lemon:
...
3.设计模式之工厂模式 -
oezx:
这里readBooks数据在对象间的影响你设置了(ArrayL ...
13.设计模式之原型模式 -
CrazzyLee:
这个例子好像不太恰当啊..原定义:定义一个操作中算法的框架,而 ...
5.设计模式之模板模式
文章列表
最近这段时间主要是写设计模式,因为本人也是初学,本着和大家切磋交流的虔诚之心,
文中难免有偏颇之处
希望大家可以批评指正,共同进步,最终助我进步。
我觉得设计模式可能更偏重于思想,可能在代码的实现上会各有不同,如果你在开发中
利用了框架又会有所不同,当然框架本身也会利用到了各种了模式,如果我们可以掌握
设计模式,一方面在解决问题时候会多有一种思路也会让自己的代码显得更加优雅,另
一面在去阅读框架代码的时候可能会容易些或者说可以更加深刻的了解框架的精髓。
为了方面大家阅读,现做一个导航目录,如下:
1. 前奏
2. 单例模式
3. 工厂模式
4. 策略模 ...
最近学习了controller,以下实现,Controller如何接收请求,以及进行页面重定向
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.Requ ...
介绍:
根据表结构生成mybatis对应的实现体和Mpper.xml文件,我们使用的是mysql数据库
需要的jar包 freemarker.jar mysql.jar 如附件
1. 数据库连接类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 数据库连接设置
*
* @author king
* 2014-5-5
*/
public class DBConnectionUtils { ...
1. 定义:
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样
2.例子:
例子参考HeadFirst 通过状态模式实现糖果机,糖果机分为四个状态:投币,未投币,售完,销售中
然后通过当前状态决定当前的操作,看一下,未用状态模式实现的java代码
public class GumballMachine {
//糖果机有四种状态,分别为:投币 、未投币 、售磬、销售中
private ...
定义:提供了一个统一接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用
最少知识原则:只和你的密友谈话。
解释:不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其它部分。如果许多类之间相互依赖,那么这个系统就会变得易碎。
例子:
用户在键盘上点击开机键,然后加载CPU,内存,硬盘驱动等信息,但是,客户只点了开机键,其它的执行内容对于客户而言是透明的。流程图如下:
1 定义:
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作
2 解决的问题
使接口不兼容的类可以在一起工作。
3 模式中的角色
1)目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
2)需要被适配的类(Adaptee):被适配的角色
3)适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
4 模式分类
类适配器模式和对象适配器模式。我也不懂。。。
例子:
...
原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。
原型模式的核心是一个clone()方法,通过该方法进行对象拷贝,Java提供了一个Clonnable接口来表示这个对象是可以拷贝的。方法是覆盖clone(),此方法每个类中都有,因为它是Java中所有类的老祖宗Object中的方法。
在进行对象拷贝的时候,该类的构造函数并没有执行, ...
1. 定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2.
四个要素
产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
建造者:实现抽象类的所有未实现的方法,具体来说一般是
简单FreeMaker
- 博客分类:
- 打通J2EE-容器
不说话,只有代码
1. 要先导入FreeMaker的包freemaker-2.3.8.jar
2. 代码
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
i ...
到网上找这个模式的例子,不知为何,突然觉得这个和之前写的装饰器模式特别像
感觉都做了一件:方法增强!
代理模式:为其他对象提供一种代理以控制对这个对象的访问.
这里要理解【控制】为何物,又是如何做到控制的。
代理模式有以下角色:
抽象角色:声明真实对象和代理对象的共同接口;
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引 ...
装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过把复杂的功能简单化,分散化,然后再运行期间,根据需要来动态组合的这样一个模式。
来段代码看看吧
1. 组件接口
package designp ...
命令模式
将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。
在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。
但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。
Command模式可应用于
a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
b)调用前 ...
1. 简单选择排序
简单选择排序(Simple Select Sort)算法的基本思想是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止。
package sort.select;
/**
* 简单选择排序
*
* @author king
*
*/
public class SimpleSelectSort {
private static void simpleS ...
1. 起泡排序
基本思想
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码如下:
package sort.exchange;
/**
* 冒泡排序算法
*
* @author king
*
*/
public class BuddleSort {
//冒泡
private static void bud ...
插入排序(direct Insert Sort)的基本思想是:顺序地将待排序的记录按其关键码的大小插入到已排序的记录子序列的适当位置。子序列的记录个数从1开始逐渐增大,当子序列的记录个数与顺序表中的记录个数相同时排序完毕。
设待 ...