设计模式:装饰者模式(学习笔记)

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、开放关闭原则的设计意义

      添加新功能时,对原有项目的代码不用需修改。