美文网首页设计模式
装饰者模式---运行时扩展远比编译时期的继承威力大

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

作者: 柿籽 | 来源:发表于2018-02-16 20:36 被阅读0次

    使用情景:类的功能扩展

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

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

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

    装饰者模式简单类图

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

    Beverage.java(被修饰抽象类)
    CondimentDecorator.java修饰抽象类(调料)
    被修饰类具体实现(饮料)
    修饰类具体实现(调料)
    运行时完成功能扩展
    具体案例:java/IO ->功能过程只需添加抽象装饰类FileInputStream子类,组合使用即可
    IO结构图
    装饰者模式优缺点:
       1.弹性注入,方便功能扩展      
       2.设计时加入大量小类,不利了解设计方式 
       3.类型问题,代码依赖特殊类型,导入可能出错
       4.实例化组件时,增加代码复杂度,往往要结合工厂模式和生成器模式使用

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/rivptftx.html