七、装饰模式(Decorator Pattern)
一、介绍
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
主要解决:使用继承实现类的功能的扩展,有时子类会过多的问题。
应用实例:
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)相关推荐
- 二十四种设计模式:装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern) 介绍 动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活. 示例 有一个Message实体类,某个对象对它的操作有Insert ...
- 设计模式系列之装饰模式(Decorator Pattern)
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类,用来包装原 ...
- 设计模式-装饰模式(Decorator Pattern)
Attach additional responsibilities to an object dynamically keeping the same interface.Decorators pr ...
- 使用C# (.NET Core) 实现装饰模式 (Decorator Pattern) 并介绍 .NET/Core的Stream
该文章综合了几本书的内容. 某咖啡店项目的解决方案 某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱. Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的 ...
- 23装饰模式(Decorator Pattern)
子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能;比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等. 按类 ...
- 基于东北F4的设计模式情景剧——第一幕 装饰模式(Decorator Pattern)
第一场 难题未解 布景:铁岭,晴天,午后,风.在一幢还算气派的写字楼的三层外墙上,挂着一条红色横幅,上面用歪歪扭扭的毛笔字写着"东北F4软件外包工作室".大风中,那早已褪色的条幅剧 ...
- 装饰模式 Decorator Pattern
java设计模式_装饰者模式(带例子) Decorator模式(装饰者) Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理 ...
- decorator java_java_详解java装饰模式(Decorator Pattern),一、装饰器模式(Decorator Patter - phpStudy...
详解java装饰模式(Decorator Pattern) 一.装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式 ...
- 设计模式(13):结构型-装饰模式(Decorator)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
最新文章
- 9月热文精选,为你的假期加点料
- linux 下/proc/cpuinfo三级缓存,linux /proc/cpuinfo文件分析
- 开发日记-20190625 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)
- 【Python】编程笔记4
- linux中sz和rz的使用,在服务器和本地之间传输数据
- [ios2] ios使用自带git respository管理项目 【转】
- 软件度量五步法包括_软件交付效能度量——从吞吐量和稳定性开始
- can总线一帧多少字节多少位_一条CAN报文到底有多少位?-汽车电子-与非网
- 接了几个APP逆向的私活,赚爆了!
- 计算机病毒和恶意软件管理制度,白城师范学院计算机病毒防治管理制度
- Everything To Byte And To Tensor -- Welcome to age of AI
- C++报错 invalid operands to binary expression
- Ubuntu下安装GParted并分区,进行虚拟机内存扩展
- Nginx区分PC或手机访问不同网站
- IntelliJ IDEA启动tomcat报错:Disconnected from server
- Tomcat 中 GET方式 请求 中文乱码 出现的原因
- 跟ChatGPT,聊聊ChatGPT
- Cozmo人工智能机器人SDK使用笔记(6)-并行部分Parallel_Action
- 在桌面上显示IP地址等信息
- 机器学习(深度学习)中的metrics