外部接口没有变化,但内部实现“偷偷”变化了。其实也不是“偷偷”,更应该光明正大地告诉人家,你是经过装饰的,虽然都有“显示鼻子”的接口方法,但你的鼻子可能是垫了东西的。
需要注意的是,修饰过的类和被修饰的类是同类的。比如,实现相同的接口。
装饰过的类要拥有一个未被装饰类的属性。即关联关系。(合成还是聚合我就懒得区分了。)
装饰过的类的方法通常要在未被装饰类的方法基础上做点手脚,以体现装饰。
顺着脑子想到的一个例子,接口PriceGetter,定义了一个方法int getPrice()。
CommonPriceGetter是实现该接口、正常计算价格的。而95DiscountPriceGetter也实现PriceGetter接口,只是计算出来的价格都是打过95折的。具体实现也很容易想到,95DiscountPriceGetter类拥有一个PriceGetter类型的属性,实例化时候塞一个CommonPriceGetter实例给他,getPrice方法在该实例同名方法返回值的基础上乘以0.95返回,即达到目的。
客户端可以任意选择使用那个类实例计算价格,但都是PriceGetter接口的实例,客户端是依赖于抽象的。
书中关于Adapter与Decorator区别的描述也有点意思。
前者是做手脚把让已有类满足其他接口;后者是在已有类实现接口不变的情况下,做手脚使得方法实现发生变化。前者是芯子不变换外观,后者是外观不变换芯子。
分享到:
相关推荐
奇幻RPG(物品锻造 与 Decorator模式)本文中,我们通过一个常见的给武器(对象)添加宝石(额外的状态和行为)的例子,讨论了Decorator设计模式的实现过程。
设计模式C++学习之装饰模式(Decorator)
C#设计模式之Decorator 装饰模式,pdf+视频教学,实例演示,易学易用~~
Decorator模式 Decorator模式
博文链接:https://your.iteye.com/blog/133420
23种设计模式之八(结构型模式)Decorator模式
java Decorator模式的简单例子
学习java 装饰模式(decorator)非常好的例子
Java类库中Decorator模式的应用研究
本资源为 "大话西游之设计模式_从猴王学艺看Decorator "文章的配套代码,通过该代码,可以更加清晰的了解Decorator模式的使用场景
动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
2022年Decorator模式中遭遇继承与聚合Java教程.docx
主要介绍了Java设计模式之装饰模式(Decorator模式)介绍,本文讲解了为什么使用Decorator、如何使用装饰模式、Jive中的Decorator实现等内容,需要的朋友可以参考下
NULL 博文链接:https://xiangtui.iteye.com/blog/1033790
这两种实体在Decorator模式中是必须的。 Decorator定义:动态给一个对象添加一些额外的职责,象在墙上刷油漆。使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。 为什么使用Decorator 我们...
java Decorator设计模式应用,可以简单了解它,初学者入。
装饰器(Decorator)模式 详细教程,简明易懂,非常清晰的,附带有代码示例。
java设计模式之Builder&Decorator,java设计模式之Builder&Decorator