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

使用情景:类的功能扩展

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

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

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

装饰者模式简单类图

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

Beverage.java(被修饰抽象类)

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

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

修饰类具体实现(调料)

运行时完成功能扩展

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,382评论 1 15
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,955评论 18 399
  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 9,572评论 4 67
  • 昨天把手机网络关了,闹钟设定1个小时,又一次阅读了一遍《成为作家》这本书,之后又花了1个多小时做了读书笔记,并且作...
    木华益阅读 1,904评论 1 5
  • 参考:自定义布局和自定义流水布局 换句话说,UITableView的布局是UICollectionView的flo...
    杨大虾阅读 2,732评论 0 0