设计模式
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);
}
}
分为简单工厂模式(要工厂做什么就做什么,通过不同的参数生成不同的实体)、工厂方法模式(通过接口定义工厂,然后继承接口生成不同的产品)和抽象工厂模式(通过接口定义每个产品细分的每个项,然后组装成一个产品)
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);
}
}
相关文章推荐
- SQL四种语言:DDL,DML,DCL,TCL
- Android4.4电池管理
- stm32之中断优先级NVIC
- JQuery的基本用法总结
- mongodb简介与增删该查
- Ubuntu 文件备份问题
- web页面实现拨打电话,发短信等功能
- linux下so动态库一些不为人知的秘密
- spring+springMVC+Mybatis整合
- sdk和ndk
- 五子棋AI算法第四篇-启发式搜索函数
- Linux用户管理
- keepalived+haproxy实现web服务的高可用和负载均衡
- Windows下Python安装NumPy、Scipy、matplotlib模块
- Eclipse反编译工具Jad及插件JadClipse配置
- Java通过Zxing生成二维码
- C# 实现C/C++共同体简单应用
- 性能测试基础知识
- leetcode笔记:Word Pattern
- 转:一个banner仔的自我修养(1) ——字体字形篇