设计模式:装饰者模式(学习笔记)
JDK中的IO流为例子:
总体装饰者 (超类): inputStream
中间装饰者: FilterInputStream
装饰着主体:FileinputStream ,StringBuffferInputStream ByteInputStream ,BufferInputStream,DataInputStream,LineNumberInpoutStream
实例演示:
咖啡馆订单系统:
(1)咖啡种类:Espresso、ShortBlack、LongBlack、Decaf
(2)调料:Milk、Soy、Chocolate
(3)扩展性好,改动方便,维护方便
1、一个差的方案
属性都挂在超类上:
问题在子类之剑如何组合,如果多一个类,并且需要与每一个现有的类组合,容易造成类爆炸。
2、一个好的方案
子类之剑不存在组合现象,类爆炸问题解决。存在的新问题:中间装饰者需要新增一个属性,属性值含有多种。
装饰着博士原理:
1、装饰者模式就像打包一个快递
1)主体:陶瓷、衣服
2)包装:报纸填充,塑料泡沫、纸板、木板
2、ComPonent:
3、ConcreteComponent和Decorator:
4、装饰者模式: 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性。
咖啡馆订单系统(装饰者新方案):
1、用装饰者模式设计重新设计的方案:
2、装饰者模式下的订单:2份巧克力+一份牛奶的LongBlack
装饰者模式关键点
1、示例项目中问题分析
混合多,复杂度以平方形式出现,不易于维护。
设置boolean变量,不可扩展。
2、装饰着模式意义
在程序运行时,可以给类添加新的功能,提高扩展性。
3、开放关闭原则的设计意义
添加新功能时,对原有项目的代码不用需修改。