设计模式之装饰者模式
2016-07-21 17:40
176 查看
本文是本人在看Head First设计模式中的装饰者模式后根据个人的理解写下的,若有错误之处,请批评指出。
继承与装饰者模式:利用继承设计子类的行为,是在编译时静态决定,而且所有子类都会继承到相同的行为。装饰者模式利用组合和委托的做法在运行时动态地扩展对象的行为
设计原则:类应该对扩展开放,对修改关闭
装饰者模式的特点:
1.装饰者和被装饰者有相同的超类型
2.一个对象能被一个或多个的装饰者装饰
3.装饰过的对象能替代被装饰的对象
4.装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,已达到特定的目的
5.对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象
装饰者模式的说明:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
装饰者模式的类图:
实例的类图:
实例代码:
Beverage类:
DarkRoast类:
Condiment类:
Mocha类:
Driver类:
继承与装饰者模式:利用继承设计子类的行为,是在编译时静态决定,而且所有子类都会继承到相同的行为。装饰者模式利用组合和委托的做法在运行时动态地扩展对象的行为
设计原则:类应该对扩展开放,对修改关闭
装饰者模式的特点:
1.装饰者和被装饰者有相同的超类型
2.一个对象能被一个或多个的装饰者装饰
3.装饰过的对象能替代被装饰的对象
4.装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,已达到特定的目的
5.对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象
装饰者模式的说明:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
装饰者模式的类图:
实例的类图:
实例代码:
Beverage类:
public abstract class Beverage { String description = "Unknown Beverage"; public String getDescription(){ return description; } public abstract double cost(); }
DarkRoast类:
public class DarkRoast extends Beverage{ public DarkRoast(){ description = "DarkRoast"; } public double cost() { // TODO Auto-generated method stub return 0.99; } }
Condiment类:
public abstract class Condiment extends Beverage{ public abstract String getDescription(); } }
Mocha类:
public class Mocha extends Condiment{ Beverage beverage; public Mocha(Beverage beverage){ this.beverage = beverage; } public String getDescription() { return beverage.getDescription() + ", Mocha"; } public double cost() { return 0.2 + beverage.cost(); } }
Driver类:
public class Driver { public static void main(String[] args) { Beverage darkroast = new DarkRoast(); System.out.println(darkroast.getDescription() + " $ " + darkroast.cost()); Beverage darkroastWithMocha = new DarkRoast(); darkroastWithMocha = new Mocha(darkroastWithMocha ); System.out.println(darkroastWithMocha.getDescription() + " $ " + darkroastWithMocha.cost()); } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用