装饰者模式(Decorator Pattern)
来源:互联网 发布:铁矿石港口库存数据 编辑:程序博客网 时间:2024/06/08 11:13
装饰者模式(Decorator Pattern)(对象结构型设计模式)
——动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
设计原则
- 类应该对扩展开放,对修改关闭。(开放—关闭原则。)
结构
Component
- 定义一个对象接口,可以给这些对象动态的添加职责。
ConcreteComponent
- 定义一个对象,可以给这个对象添加一些职责。
Decorator
- 维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
ConcreteDecorator
- 向组件添加职责。
Java I/O
——真实世界的装饰者。
”黑暗面“
- 在设计中加入大量的小类。
- 代码会依赖特定的类型。
- 实例化组件时,会增加代码的复杂度。(工厂模式和生成器模式对这个问题有帮助。)
For example
public abstract class Beverage { String description = "Unknown Beverage"; public String getDescription() { return description; } public abstract double cost();}
public abstract class CondimentDecorator extends Beverage{ public abstract String getDescription();}
public class Espresso extends Beverage{ public Espresso() { description = "Espresso"; } public double cost() { return 1.99; }}
public class HouseBlend extends Beverage{ public HouseBlend() { description = "HouseBlend"; } public double cost() { return 0.89; }}
public class Mocha extends CondimentDecorator{ Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; } public String getDescription() { return beverage.getDescription() + ", Mocha"; } public double cost() { return .2 + beverage.cost(); }}
public class StarbuzzCoffee { public static void main(String[] args) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() + " $" + beverage.cost()); Beverage beverage2 = new HouseBlend(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); System.out.println(beverage2.getDescription() + " $" + beverage2.cost()); }}
参考《设计模式》《Head First Design Patterns》
0 0
- 装饰者模式(the Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- Decorator Pattern 装饰者模式(二)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 3.装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- Decorator Pattern (装饰者模式)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(decorator pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- Decorator Pattern 装饰者模式
- HDU 1576 A/B
- http://www.cnblogs.com/linjiqin/archive/2013/11/04/3407126.html
- 开始学习“深度学习”
- c#实现Foreach枚举_IEnumerable和IEnumerator
- 用Android自带的signapk.jar签名应用程序
- 装饰者模式(Decorator Pattern)
- 【Python学习笔记】错误处理
- 易语言 组件消息参数详解
- 一些框架
- SOAP、XML-RPC 以及 REST 之间的区别是什么?
- PHP编程中10个最常见的错误
- tomcat常用配置详解
- XZ_iOS之错误集锦
- 易语言 "发送消息()"_SendMessage详细说明 超给力教程