一、介绍

意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

主要解决:使用继承实现类的功能的扩展,有时子类会过多的问题。

应用实例

1、一幅照片,将它放入玻璃相框里,就具有了防水的功能

分类:属于结构型设计模式。

二、实现

装饰模式

类图:

核心思想:
Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能

.NET实现代码:

    public interface ISourceable{void Method();}
    public class Source : ISourceable{public void Method(){Console.WriteLine("装饰模式 Source Method() 原始方法");}}
    public class Decorator : ISourceable{private ISourceable Source { get; set; }public Decorator(ISourceable source){this.Source = source;}public void Method(){Console.WriteLine("装饰模式 Decorator Method() 之前");Source.Method();Console.WriteLine("装饰模式 Decorator Method() 之后");}}
    public class DecoratorTest{public static void Test(){ISourceable obj = new Decorator(new Source());obj.Method();}}

输出:

装饰模式 Decorator Method() 之前
装饰模式 Source Method() 原始方法
装饰模式 Decorator Method() 之后

三、总结

装饰器模式的应用场景:

1、需要扩展一个类的功能。

2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

缺点:产生过多相似的对象,不易排错!

参考资料:

23种设计模式全解析 https://www.cnblogs.com/geek6/p/3951677.html

Java之美[从菜鸟到高手演练] https://blog.csdn.net/zhangerqing

七、装饰模式(Decorator Pattern)相关推荐

  1. 二十四种设计模式:装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) 介绍 动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活. 示例 有一个Message实体类,某个对象对它的操作有Insert ...

  2. 设计模式系列之装饰模式(Decorator Pattern)

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

  3. 设计模式-装饰模式(Decorator Pattern)

    Attach additional responsibilities to an object dynamically keeping the same interface.Decorators pr ...

  4. 使用C# (.NET Core) 实现装饰模式 (Decorator Pattern) 并介绍 .NET/Core的Stream

    该文章综合了几本书的内容. 某咖啡店项目的解决方案 某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱. Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的 ...

  5. 23装饰模式(Decorator Pattern)

    子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能;比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等. 按类 ...

  6. 基于东北F4的设计模式情景剧——第一幕 装饰模式(Decorator Pattern)

    第一场 难题未解 布景:铁岭,晴天,午后,风.在一幢还算气派的写字楼的三层外墙上,挂着一条红色横幅,上面用歪歪扭扭的毛笔字写着"东北F4软件外包工作室".大风中,那早已褪色的条幅剧 ...

  7. 装饰模式 Decorator Pattern

    java设计模式_装饰者模式(带例子) Decorator模式(装饰者)    Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理 ...

  8. decorator java_java_详解java装饰模式(Decorator Pattern),一、装饰器模式(Decorator Patter - phpStudy...

    详解java装饰模式(Decorator Pattern) 一.装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式 ...

  9. 设计模式(13):结构型-装饰模式(Decorator)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

最新文章

  1. 9月热文精选,为你的假期加点料
  2. linux 下/proc/cpuinfo三级缓存,linux /proc/cpuinfo文件分析
  3. 开发日记-20190625 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)
  4. 【Python】编程笔记4
  5. linux中sz和rz的使用,在服务器和本地之间传输数据
  6. [ios2] ios使用自带git respository管理项目 【转】
  7. 软件度量五步法包括_软件交付效能度量——从吞吐量和稳定性开始
  8. can总线一帧多少字节多少位_一条CAN报文到底有多少位?-汽车电子-与非网
  9. 接了几个APP逆向的私活,赚爆了!
  10. 计算机病毒和恶意软件管理制度,白城师范学院计算机病毒防治管理制度
  11. Everything To Byte And To Tensor -- Welcome to age of AI
  12. C++报错 invalid operands to binary expression
  13. Ubuntu下安装GParted并分区,进行虚拟机内存扩展
  14. Nginx区分PC或手机访问不同网站
  15. IntelliJ IDEA启动tomcat报错:Disconnected from server
  16. Tomcat 中 GET方式 请求 中文乱码 出现的原因
  17. 跟ChatGPT,聊聊ChatGPT
  18. Cozmo人工智能机器人SDK使用笔记(6)-并行部分Parallel_Action
  19. 在桌面上显示IP地址等信息
  20. 机器学习(深度学习)中的metrics

热门文章

  1. 烟气里都含有哪些有毒物质
  2. 网络状态监控工具Smokeping 安装指南
  3. 使用遗传算法解旅行商问题
  4. Tftpd32使用方法
  5. ui设计范畴有什么麓言信息
  6. 如何在Linux下安装cmake
  7. 【ubuntu18.04安装】128G u盘安装ubuntu18.04
  8. E-140W-P光猫配置
  9. 计算机专业学开源软件,计算机专业学生使用开源软件的问卷调查分析
  10. Oracle ASH查询活动会话历史记录