您的位置:首页 > 其它

设计模式

2016-02-15 15:28 204 查看
1. 工厂模式

分为简单工厂模式(要工厂做什么就做什么,通过不同的参数生成不同的实体)、工厂方法模式(通过接口定义工厂,然后继承接口生成不同的产品)和抽象工厂模式(通过接口定义每个产品细分的每个项,然后组装成一个产品)

2..单例模式

3.装饰模式

动态给一个对象添加一些额外的职责

这个比较适合装饰模式的例子,是在原有基础上进行扩展

而策略模式相对而言每个策略是相互独立的

public static void main(String[] args) {

//Change为装饰器,典型的缓冲流中BufferedReader就用了装饰模式

TheGreatestSage monkey = new Monkey();

TheGreatestSage fish = new Fish(monkey);

//完全透明

TheGreatestSage bird = new Bird(fish);

//半透明

//装饰模式的用意是在不改变接口的前提下,增强所考虑的类的性能,半透明

//的装饰模式是介于装饰模式和适配器模式之间的。适配器模式的用意是改变所考虑的类的接口

Bird halfBird = new Bird(fish);

//monkey.move();

//fish.move();

//bird.move();

}



4.适配器模式:分为类适配模式(继承需要适配的类和实现接口)、对象适配模式(把需要适配的类作为属性放到适配器类里面)和缺省适配模式(鲁智深的故事,天星)



5.策略模式:

策略模式的好处在于你可以动态的改变对象的行为,每个策略之间是相互独立的,而装饰模式恰恰不是,是有关联的,实现起来比较相似,都是实现接口,然后把接口定义成属性,然后是构造的时候传递接口对应的实现

6.责任链模式:

(1)概念:将能够处理同一类请求的对象连成一条链所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。

(2)应用场景:

Java中的异常机制就是一种责任链模式,catch链就是一种责任链。

Servlet中的过滤器的链式处理。

JavaScript中的时间冒泡和捕获机制。

Structs2中拦截器的调用。

(3)代码:

/**

* 责任链

* @author wxisme

*

*/

public abstract class Handler {

protected Handler nextHandler;

public abstract void handleRequest(int req);

public Handler getNextHandler() {

return nextHandler;

}

public void setNextHandler(Handler nextHandler) {

this.nextHandler = nextHandler;

}

}

class ConcreteHandler1 extends Handler {

@Override

public void handleRequest(int req) {

if(req == 1) {

System.out.println("1处理请求");

}

else {

System.out.println("1释放请求");

this.nextHandler.handleRequest(req);

}

}

}

class ConcreteHandler2 extends Handler {

@Override

public void handleRequest(int req) {

if(req == 2) {

System.out.println("2处理请求");

}

else {

System.out.println("2释放请求");

this.nextHandler.handleRequest(req);

}

}

}

class ConcreteHandler3 extends Handler {

@Override

public void handleRequest(int req) {

if(req == 3) {

System.out.println("3处理请求");

}

else {

System.out.println("3释放请求");

this.nextHandler.handleRequest(req);

}

}

}

public class Client {

public static void main(String[] args) {

Handler h1 = new ConcreteHandler1();

Handler h2 = new ConcreteHandler2();

Handler h3 = new ConcreteHandler3();

h1.setNextHandler(h2);

h2.setNextHandler(h3);

h1.handleRequest(1);

System.out.println("-----------");

h1.handleRequest(2);

System.out.println("-----------");

h1.handleRequest(3);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: