装饰模式

解释

装饰模式(Decorator),又名包装模式(Wrapper),动态地给一个对象添加一些额外的职责。

UML图

装饰者模式.gif

抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。
具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰(Concrete Decorator)角色:负责给构件对象“贴上”附加的责任。

工作原理

装饰模式的链式引用关系使装饰模式看上去像是一个LinkedList,如下图所示。

装饰者链.jpg

优缺点

优点:
(1)通过组合而并非继承的方式,实现了动态扩展对象的功能的能力;
(2)有效避免了使用继承的方式扩展对象而带来的灵活性差,子类无限扩张的问题。
缺点:
(1)装饰链不能过长,否则会影响效率;
(2)会提高程序的复杂性,增加系统维护难度。

应用场景

(1)想透明并且动态地给对象增加新的职责的时候;
(2)给对象增加的职能,在未来存在增加或减少可能;
(3)用继承扩展功能不太现实的情况下,应该考虑用组合的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0x01 前言   装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变...
    菩提树下成魔阅读 3,114评论 0 0
  • (转载)原文地址 在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又...
    zjk_00阅读 3,811评论 0 2
  • 1 概述 在一个项目中,你会有非常多的因素考虑不到,特别是业务的变更,不时的冒出一个需求是很正常的情况。有三个继承...
    今晚打肉山阅读 2,642评论 0 0
  • 一、模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途...
    端木轩阅读 3,477评论 0 0
  • 周一《P.E.T.父母效能训练》第1-2章的共读里(链接)我提到了这周大家可以先练习问题归属原则,当和孩子出现冲突...
    heureusefay阅读 1,787评论 0 0

友情链接更多精彩内容