装饰者模式---运行时扩展远比编译时期的继承威力大

使用情景:类的功能扩展

设计原则:类营改对扩展开放,对修改关闭

体现案例一:
      观察者模式,通过添加新的观察者,通知观察者来扩展功能

简单说明:
     装饰者模式动态的将责任添加到对象上,若要扩展功能,装饰者提供了比继承更有弹性替代方案。

装饰者模式简单类图

总共分为四部分:
        1.被修饰类基本模型(接口或者抽象类)
        2.被修饰类子类(具体组件)
        3.修饰类基本模型(抽象类)
        4.修饰类子类(具体修饰类)
简单说明:
     1.装饰者与被装饰者必须实现相同的接口以保持类型一致,我们利用继承来达到"类型匹配",而不是获取行为(扩展功能)
     2.使用对象组合,让被修饰类(饮料)与修饰类(调料)弹性地加以混合与匹配(扩展功能)--依赖继承,那么类的行为只能在编译时决定,使用组合保证了在运行时决定。
     3.被修饰类基本模型可以是接口或者抽象类,灵活变通
具体实现:
    

Beverage.java(被修饰抽象类)

CondimentDecorator.java修饰抽象类(调料)

被修饰类具体实现(饮料)

修饰类具体实现(调料)

运行时完成功能扩展

具体案例:java/IO ->功能过程只需添加抽象装饰类FileInputStream子类,组合使用即可
IO结构图

装饰者模式优缺点:
   1.弹性注入,方便功能扩展      
   2.设计时加入大量小类,不利了解设计方式 
   3.类型问题,代码依赖特殊类型,导入可能出错
   4.实例化组件时,增加代码复杂度,往往要结合工厂模式和生成器模式使用

你可能感兴趣的:(装饰者模式---运行时扩展远比编译时期的继承威力大)