定义

  装饰模式的英文原话是:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclass for extending functionality.意思是:动态的给一个对象添加一些额外的职责。就增强功能来说,装饰模式相比于代理模式生成子类更为灵活。

  装饰模式有四种角色:

  抽象构建(Component)角色:该角色用于规范需要装饰的对象(原始对象)。

  具体构建(Concrete Component)角色:该角色实现抽象构件接口,定义一个需要装饰的原始类。

  装饰角色(Decorator)角色:该角色持有一个构建对象的实例,并定义一个与抽象构建接口一致的接口。

  具体装饰模式(Concrete Decorator)角色:该角色负责对构建对象进行装饰。

/*** 抽象构建* 原始对象接口*/
public interface Component {public void operation();
}/*** 具体构建* 原始对象类*/
public class ConcreteComponent implements Component{@Overridepublic void operation() {//业务代码System.out.println("原始对象业务代码");}
}/*** 装饰类角色* 抽象类*/
public abstract class Decorator implements Component {private Component component = null;public Decorator(Component component) {this.component = component;}@Overridepublic void operation() {this.component.operation();}
}/*** 具体修饰*/
public class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}//装饰类添加的方法private void addmethod(){System.out.println("Decorator添加的方法");}//重写operation方法public void operation(){this.addmethod();super.operation();}
}//调用
public class DecoratorDemo {public static void main(String[] args) {Component component = new ConcreteComponent();component.operation();System.out.println("经过装饰----------");component = new ConcreteDecorator(component);component.operation();}
}

源码

装饰模式的优点

  • 装饰类和被装饰类可以独立发展,而不会相互耦合,即Component类无须知道Decorator类,Decorator类从外部扩展Component类的功能,而Decorator不用知道具体的构建。
  • 装饰模式是继承关系的一个替代方案。装饰类Decorator不管装饰多少层,返回的对象还是Component。
  • 装饰模式可以动态地扩展一个实现类的功能。

装饰模式的缺点

  多层的装饰比较复杂

装饰模式使用场景

  • 需要扩展一个类的功能,或给一个类增加附加功能。
  • 需要动态地给一个对象增加功能,这些功能可以动态地撤销。
  • 需要为一批类进行改装或加装功能。

  装饰模式是对继承的有效补充。单纯使用继承时,在某些情况下回增加很多子类,而且灵活性差,也不容易维护。装饰模式可以替代继承,解决类膨胀的问题,如java基础类库中的与输入输出流相关的类大量使用了装饰模式。

转载于:https://www.cnblogs.com/aeolian/p/7887251.html

设计模式-装饰模式(08)相关推荐

  1. 设计模式----装饰模式

    设计模式--装饰模式 "装饰模式(Decorator)"又名"包装模式(Wrapper)",通常用来灵活地扩充对象的功能. 在此之前我们可以通过类的继承来扩充父 ...

  2. 大话设计模式-装饰模式(大鸟和小菜Java版)

    装饰模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.(百度百科) 这个模式让后期的修改变得极为简单,真的就高内 ...

  3. 大话设计模式—装饰模式

    装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...

  4. 设计模式--装饰模式

    目录 什么是装饰模式? 应用代码示例 装饰模式模板 jdk中的装饰模式 为什么装饰器类不能直接实现Component父类? 什么是装饰模式? 以生活中的场景来举例,一个蛋糕胚,给它涂上奶油就变成了奶油 ...

  5. C++设计模式-装饰模式

    目录 基本概念 代码和实例 基本概念 装饰模式是为已有功能动态地添加更多功能的一种方式. 当系统需要新功能的时候,是向旧系统的类中添加新代码.这些新代码通常装饰了原有类的核心职责或主要行为. 装饰模式 ...

  6. 李建忠设计模式——装饰模式

    1."单一职责"模式 在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式 Deco ...

  7. C++设计模式——装饰模式(高屋建瓴)

    原网址:https://blog.csdn.net/CoderAldrich/article/details/83115394 重点在于 ConcreteDecoratorA(Component *d ...

  8. java设计模式——装饰模式

    装饰模式也称为包装模式.结构型设计模式之一,其使用一种对客户端透明的方式动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一. 装饰模式可以动态的给一个对象添加一些额外的职责.就增加功能功能来说 ...

  9. 设计模式——装饰模式详解

    0. 前言   写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇 ...

最新文章

  1. javascript的特点
  2. 半透明父视图,小程序不透明
  3. 复习笔记(七)——C++友元
  4. 微信小程序点播插件_小程序云直播amp;云点播插件限时降价了!!!
  5. PInvoke调用导致堆栈不对称
  6. Qt小传——从诞生到发展、繁荣
  7. python中用于绘制各种图形、标注文本_python ImageDraw类实现几何图形的绘制与文字的绘制...
  8. 和菜鸟一起学linux之DBUS基础学习记录
  9. 重大要素改变中的机会选择包括_种草莓通过IT技术实现,代码“魔法”改变了什么?...
  10. 使用WPF和.NET 6将Windows应用程序迁移到Windows on Arm
  11. Linux系统下的几种终端设备文件
  12. ibm服务器硬盘谁生产,IBM硬盘-昔日的开山鼻祖为何家道中落?
  13. 安装虚拟机(二)配置静态ip
  14. Maven生命周期和插件
  15. i春秋 第二届春秋欢乐赛 Web-Hello World
  16. linux拼音五笔输入法下载软件,自已动手制作Linux下拼音五笔输入法
  17. 爆炸三角形如何用计算机实现,爆炸三角形原理
  18. 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
  19. 《王牌特工2:黄金圈》观后感
  20. 尝鲜——Windows11 安装教程 (无视TMP2.0)

热门文章

  1. 快速求区间和的有趣算法——树状数组
  2. HOG特征过程解释(转)
  3. pythopn 迭代器
  4. JNI命令行下编译错误解决方案
  5. 老王学linux-centos6.7drbd8.4.3
  6. ntfs for Mac无法填写序列号怎么解决
  7. 往事并不如烟@武汉 --- 和同事们一起'诈金花’
  8. HP-UX B.11.31从安装到VG配置
  9. 【原创视频教程】学生信息管理系统5--学员成绩管理
  10. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)