装饰器模式

2020-02-05 21:12
1133
0
      装饰器模式(Decorator Pattern)在不改变原有功能基础上新增功能,属于结构型模式,是对现有类的一个包装。
就新增功能来说,用装饰器模式比直接生成子类更加灵活。
 
何时使用:在不想增加很多子类的情况下。
使用场景:1、扩展一个类的功能。2、动态增加功能,动态撤销。
应用实例
  1. 打地基,打好地基后,后期可以根据需要新增一层楼或者两层楼就可以看后面情况。
  2. Java IO流的读写操作
实现方式
看如上类图即可对怎么实现装饰模式有一个清晰的了解了。
      Component:抽象组件,可以看成被装饰类的抽象接口
      ConcreteComponent:被装饰的类,接口的具体实现
然后要怎么做才能不通过继承而对ConcreteComponent附件功能呢?
      如上图可以先定义一个Decorator(抽象的装饰类),然后要附加什么功能通过ConcreteDecorator实现。
然后继续分析,Decorator对Component进行了实现。为什么要实现呢?
      因为要能替代被装饰的类(ConcreateComponent),所以要实现同一接口。
实现了同一接口之后呢,难道再把ConcreateComponent里的功能逻辑再写一遍?
      当然不,因此就要把被装饰类作为抽象装饰类的成员变量,这样在装饰类中就能调用原有方法。
      把被装饰类作为抽象装饰类的成员变量,注入对象可以通过set方法或者构造函数传入(IO流的底层读写就是通过构造传入)
 

全部评论