装饰模式

概述

  • 装饰模式是动态地扩展一个对象的功能,而不需要改变原始类代码的一种成熟模式。
  • 在装饰模式中,“具体组件”类和“具体装饰”类是该模式中最重要的两个角色。
  • “具体组件”类的实例称作“被装饰者”,“具体装饰”类的实例称为“装饰者”。
  • “具体装饰”类需要包含有“具体组件”类的一个实例的引用,以便装饰“被装饰者”。

装饰模式的结构

装饰模式的结构中包括四种角色。

  • 抽象组件(Component)
  • 具体组件(ConcreteComponent)
  • 装饰(Decorator)
  • 具体装饰(ConcreteDecotator)

抽象组件(Component)

  • 抽象组件是一个抽象类。
  • 抽象组件定义了“被装饰者”需要进行“装饰”的方法。

具体组件(ConcreteComponent)

  • 具体组件是抽象组件的一个子类。
  • 具体组件的实例称作“被装饰者”。

装饰(Decorator)

  • 装饰也是抽象组件的一个子类,但装饰还包含一个抽象组件声明的变量以保存“被装饰者”的引用。
  • 装饰可以是抽象类也可以是一个非抽象类,如果是非抽象类,那么该类的实例称作“装饰者”。

具体装饰(ConcreteDecotator)

  • 具体装饰是装饰的一个非抽象子类,具体装饰的实例称作“装饰者”。

装饰模式相对继承机制的优势

  • 我们知道,通过继承也可以改进对象的行为,对于某些简单的问题这样做未尝不可,但是如果考虑到系统扩展性,就应当注意面向对象的一个基本原则之一:少用继承,多用组合
  • 使用继承机制设计的这个系统面临着一个巨大的挑战,那就是用户需求的变化。

装饰模式的优点

  • 被装饰者和装饰者是松耦合关系。
  • 由于装饰(Decorator)仅仅依赖于抽象组件(Component),因此具体装饰只知道它要装饰的对象是抽象组件某一个子类的实例,但不需要知道是哪一个具体子类。
  • 装饰模式满足“开-闭原则”。
  • 不必修改具体组件,就可以增加新的针对该具体组件的具体装饰。
  • 可以使用多个具体装饰来装饰具体组件的实例。

适合使用装饰模式的情景

  • 程序希望动态地增强类的某个对象的功能,而又不影响到该类的其他对象。
  • 采用继承来增强对象功能不利于系统的扩展和维护。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 有时候就得抽空出门学习一下,开阔一下自己的视野。今天在开发区小学参加平度市信息技术学科核心素养发展教研活动,几...
    王晓峰Dev阅读 1,346评论 1 10
  • 今天中午,爸爸妈妈开始包饺子,做除夕的年夜饭。爸爸妈妈包的是猪肉莲菜馅的饺子。我非常喜欢吃这种饺子。于是,爸妈就给...
    李冯涛阅读 1,589评论 0 0
  • 谷雨馨,10月23日第三次读书打卡。今天我读了《三国演义》这本书的第15回,这个章节主要讲的是有刘玄德三顾茅庐,诸...
    suifeng76阅读 1,702评论 0 0
  • 夏雨雪su01阅读 952评论 0 0

友情链接更多精彩内容