设计模式GOF23——装饰模式
2016-08-06 11:07
411 查看
装饰模式(decorator)是结构性模式的一种。结构型模式的核心作用是从程序的结构上实现低耦合,从而可以扩大整体的类结构,用来解决更大的问题。
装饰模式是一种用来代替继承的技术,无需通过继承子类就能扩展对象的新功能。使用对象关联关系代替继承关系。增加灵活性,同时避免类型体系的快速膨胀。
具体构建角色(ConcreteComponent)(真实对象):例如io流中的FileInputStream、FileOutputStream
装饰角色(Decorator):持有一个抽象构件的引用,装饰对象接收所有客户端的请求,并吧这些请求转发给真实对象。这样,就能在真实对象调用前后增加新的功能。
具体装饰角色(ConCreDecorator):负责给构件对象增加新的责任。
Swing中图形界面的构建功能
ServletAPI中提供了一个request对象的Decorater设计模式的默认实现类HttpServletRequestWrapper,HttpServletRequestWrapper类,增强了request对象的功能。
Struts2中,request,response,session对象的处理
模式的职责
动态的为一个对象增加新的功能。装饰模式是一种用来代替继承的技术,无需通过继承子类就能扩展对象的新功能。使用对象关联关系代替继承关系。增加灵活性,同时避免类型体系的快速膨胀。
模式的角色
抽象构建角色(Component):真实对象和装饰对象有相同的接口。这样,客户端对象就能过以与真实对象相同的方式同装饰对象交互。具体构建角色(ConcreteComponent)(真实对象):例如io流中的FileInputStream、FileOutputStream
装饰角色(Decorator):持有一个抽象构件的引用,装饰对象接收所有客户端的请求,并吧这些请求转发给真实对象。这样,就能在真实对象调用前后增加新的功能。
具体装饰角色(ConCreDecorator):负责给构件对象增加新的责任。
模式的实现
//模式角色:抽象构件角色 public interface ICar { //抽象的构件方法 void move(); } //模式角色:具体构件对象(真实对象) class Car implements ICar{ //真实对象对构件方法的实现 public void move() { System.out.println("在陆地上跑"); } } //模式角色:装饰角色 class SuperCar implements ICar{ //对装饰对象的引用 private ICar car ; //可以给装饰对象引用赋值的构造方法 public SuperCar(ICar car){ super(); this.car = car; } //真实对象对构件方法的实现 public void move() { System.out.println("在陆地上跑"); } } //模式角色:具体装饰角色 class FlyCar extends SuperCar{ //对父类构造器的继承,可以进行修改 public FlyCar(ICar car) { super(car); } //真实对象对构件方法的实现 public void move() { System.out.println("在天上飞"); } } //模式角色:具体装饰角色 class WaterCar extends SuperCar{ //对父类构造器的继承,可以进行修改 public WaterCar(ICar car) { super(car); } //真实对象对构件方法的实现 public void move() { System.out.println("在水里跑"); } } //客户端调用 public class Client { public static void main(String[] args) { //被装饰对象的正常初始化和引用 Car car = new Car(); car.move(); //装饰对象成扩展的 FlyCar flycar = new FlyCar(car); flycar.move(); //扩展后的对象还可以继续扩展 WaterCar watercar = new WaterCar(flycar); watercar.move(); } }
模式的使用场景
IO流中输入流和输出流的设计Swing中图形界面的构建功能
ServletAPI中提供了一个request对象的Decorater设计模式的默认实现类HttpServletRequestWrapper,HttpServletRequestWrapper类,增强了request对象的功能。
Struts2中,request,response,session对象的处理
模式的小结
装饰模式有效的避免的过多层次的继承,可以通过创建不同的对象的方式给对象扩展方法,从而在结构是实现低耦合。相关文章推荐
- 设计模式GOF23——克隆模式
- 设计模式GOF23——桥接模式
- 设计模式GOF23——外观模式
- 设计模式GOF23——享元模式
- 设计模式GOF23——单例模式
- 设计模式GOF23——访问者模式
- 设计模式GOF23——迭代器模式
- 设计模式GOF23——适配器模式
- 设计模式GOF23——代理模式
- 设计模式GOF23——组合模式
- 设计模式系列——装饰模式
- GOF23设计模式之组合模式之实现
- GOF23设计模式之解释器模式和访问器模式的理解
- GOF23之单例模式Demo
- gof23 适配器模式
- (GOF23设计模式)_单例模式_应用场景_饿汉式_懒汉式
- GOF 23 kinds of design patterns
- 【GOF23设计模式】_状态模式_UML状态图_酒店系统房间状态_线程对象状态切换JAVA250
- 笔记--设计模式精解c++-GoF 23 种设计模式解析
- 【GOF23设计模式】装饰模式