`
withoutme_hw
  • 浏览: 9465 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

装饰者模式(Decorator Pattern)

阅读更多

考虑这样一个场景:咖啡厅需要做一个订单系统,其中必不可少的功能是:获取每种咖啡的价格以及描述。最初设计如下:

但是,每种咖啡可以根据顾客的选择,添加不同的调料,甚至可能是两份同种调料,例如:牛奶,摩卡,豆浆等。这样,如果采用上面的设计,类图会是这样的:

这样设计的缺陷非常明显:类的数量过于庞大,但是问题还不仅仅如此,当某一个原料的价格上扬了,比如牛奶,那么所有包含牛奶的咖啡的cost方法都需要重新修改,这无疑是一场灾难。

一种改进的设计如下:

这样设计类少多了,但是记住,在软件开发中,永远不变的是“改变”,当下面的情况发生改变时,我们必须修改较多代码:1.调料价格改变,2.增加一种调料,3.可能开发出一种新的饮料,不能加入四种调料中的任何一种,4.双倍摩卡咖啡不能实现。

这样,如果需要一个双倍摩卡加牛奶的DarkRoast,只需要 new Milk(new Mocha(new Mocha(new DarkRoast())));咖啡的配料完全在运行时决定。计算价格的方法就是外层调用里层,一层层求和即可。可以任意选择配料的种类,数量,并且在运行时决定,类的数量也不多。

这种设计模式被用在Java I/O库中,比如:InputStream in = new LowerCaseInputStream(new BufferedInputStream(new FileInputStream("in.txt"))); IO库这样设计,可以使用户任意组合他所需要的IO功能,只需要对Stream进行包装即可。

要点:

设计原则:

分享到:
评论

相关推荐

    设计模式之装饰模式(Decorator Pattern)

    动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。

    装饰者模式(Decorator Pattern)原理图

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现 VS2012 下通过

    java 装饰模式(Decorator Pattern)详解

    主要介绍了java 装饰模式(Decorator Pattern)详解的相关资料,需要的朋友可以参考下

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...

    C#版 24种设计模式

    备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) ...装饰模式(Decorator Pattern) 状态模式(State Pattern) 组合模式(Composite Pattern)

    java实现装饰器模式(Decorator Pattern)

    主要为大家详细介绍了java实现装饰器模式Decorator Pattern,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    详解java装饰模式(Decorator Pattern)

    主要为大家详细介绍了java装饰模式Decorator Pattern,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,对装饰器模式感兴趣的小伙伴们可以参考一下

    java 装饰模式(Decorator Pattern)详解及实例代码

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装

    C#装饰器模式(Decorator Pattern)实例教程

    主要介绍了C#装饰器模式(Decorator Pattern),以一个完整实例形式讲述了C#装饰器模式的实现过程,有助于深入理解C#程序设计思想,需要的朋友可以参考下

    DecoratorPattern.zip

    设计模式—装饰者模式,实例代码演示,设计模式—装饰者模式,实例代码演示设计模式—装饰者模式,实例代码演示,

    .NET设计模式(10):装饰模式(DecoratorPattern)

    在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式...[GOF《设计模式》]图1Decorator模式结构图装饰模式动态地给一个对象添加额外的职责。不论一幅画有没有画

    C#设计模式_设计模式_C#_

    装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令...

    C#设计模式(23种设计模式)

    装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令...

    用Java实现23种设计模式

    装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command ...

    Java设计模式,并加上个人理解

    12. 装饰者模式 (Decorator Pattern) 13. 访问者模式 (Visitor Pattern) 14. 迭代器模式 (Iterator Pattern) 15. 享元模式 (Flyweight Pattern) 16. 桥接模式 (Bridge Pattern) 17. 观察者模式 (Observer...

    设计模式PPT

     装饰者模式(Decorator Pattern)  外观模式(Facade Pattern)  享元模式(Flyweight Pattern)  代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种...

    设计模式代码——c#

    8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型 13. 模板方法(Template Method) ...

    23种设计模式 (创建型,结构型,行为型)

    装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令...

Global site tag (gtag.js) - Google Analytics