参考

http://www.cnblogs.com/god_bless_you/archive/2010/06/10/1755212.html

一、装饰模式:

顾名思义,就是对物品进行装饰,既然是装饰也就要具备原有物品的功能特性,并且在其基础上添加一些新的功能特性。这么说的话有点像继承。可是继承的话,子类里不必有父类,装饰的话需要包含原有物品的引用,因为你是在对物品进行包装修饰。而且继承的话通常确实有一套继承体系的情况下用继承更好。穿了衣服的人和没穿衣服的人在现实世界的概念里是不具备继承关系的。再着,装饰模式可以装饰多个物品,继承不行。比如一件衣服你可以给甲穿,也可以给乙穿,只要给人穿就行。

装饰模式的巧妙之处就在于在其构造函数里有对要装饰类的引用。

二、装饰模式的应用场景:

1. 需要扩展一个类的功能,或给一个类添加附加职责。

2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。

3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。

4. 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

优点:

1. Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。

2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

缺点:

1. 这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。

2. 装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。

3. 装饰模式是针对抽象组件(Component)类型编程。但是,如果你要针对具体组件编程时,就应该重新思考你的应用架构,以及装饰者是否合适。当然也可以改变Component接口,增加新的公开的行为,实现“半透明”的装饰者模式。在实际项目中要做出最佳选择。

转载于:https://www.cnblogs.com/windy86/p/3990856.html

设计模式学习每天一个——Decorator模式相关推荐

  1. 设计模式学习笔记——装饰(Decorator)模式

    设计模式学习笔记--装饰(Decorator)模式 @(设计模式)[设计模式, 装饰模式, decorator] 设计模式学习笔记装饰Decorator模式 基本介绍 装饰案例 类图 实现代码 Dis ...

  2. 设计模式学习每天一个——Factory模式 和 Abstract Factory模式

    工厂模式与抽象工厂模式的区别 转载于:https://www.cnblogs.com/windy86/p/4022551.html

  3. 设计模式学习笔记——解释器(Interpreter)模式

    设计模式学习笔记--解释器(Interpreter)模式 @(设计模式)[设计模式, 解释器模式, Interpreter] 设计模式学习笔记解释器Interpreter模式 基本介绍 解释器案例 类 ...

  4. 设计模式学习笔记——备忘录(Memento)模式

    设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...

  5. 设计模式学习笔记——外观(Facade)模式

    设计模式学习笔记--外观(Facade)模式 @(设计模式)[设计模式, 外观模式, facade] 设计模式学习笔记外观Facade模式 基本介绍 外观案例 类图 实现代码 Database类 ma ...

  6. 设计模式学习笔记——访问者(Visitor)模式

    设计模式学习笔记--访问者(Visitor)模式 @(设计模式)[设计模式, 访问者模式, visitor] 设计模式学习笔记访问者Visitor模式 基本介绍 访问者案例 类图 实现代码 Visit ...

  7. 设计模式学习笔记——策略(Strategy)模式

    设计模式学习笔记--策略(Strategy)模式 @(设计模式)[设计模式, 策略模式, Stategy] 设计模式学习笔记策略Strategy模式 基本介绍 策略案例 类图 实现代码 Hand类 S ...

  8. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

  9. 设计模式学习笔记——工厂(Factory)模式

    设计模式学习笔记--工厂(Factory)模式 @(设计模式)[设计模式, 工厂模式, factory] 设计模式学习笔记工厂Factory模式 基本介绍 工厂案例 类图 实现代码 framework ...

最新文章

  1. 工具栏对象GUI Status 与GUI Title
  2. Windows server 2008 远程桌面建立
  3. lua 字符串分割_Lua 分隔字符串,可以设置指定分隔符
  4. HTTPClient系统学习
  5. Memcached 工作原理
  6. micropython中文社区-micropython支持中文啦!
  7. ssh传输越多越慢_Linux下分析网站访问慢原因
  8. android listview动态添加viewpager,请教大神,android如何在viewpager里添加listview,谢谢啦...
  9. 剑指offer面试题26-复杂链表的复制
  10. 用Python解析XMind
  11. linux sqluldr2命令,sqluldr2 linux64
  12. 制作u盘winpe启动盘_Ventoy启动盘制作工具,Win、Linux、PE多系统镜像装进同1个U盘...
  13. android textview左边图片,Android TextView 多种方式显示图片-Fun言
  14. iphone/ipad保存图片问题
  15. laravel seeder 填充数据
  16. 锐角三角形的一些结论及证明
  17. Soul聊天记录备份和恢复(旧机迁移至新机)
  18. Android的资源引用(2)(Drawable)
  19. 地球系统模式(CESM)技术
  20. 广度优先搜索:迷宫问题

热门文章

  1. 解决Gerrit的git unpack error问题
  2. 检测编码并制作一切UTF-8
  3. 在不推动提交的情况下触发Travis-CI重建?
  4. REST和RESTful有什么区别
  5. 如何获取foreach循环当前迭代的索引?
  6. nginx 命令_MAC 操作nginx命令
  7. grafana计算不同时间的差值_大数据时代!如何基于Spark Streaming构建实时计算平台...
  8. css3 复合选择器,CSS复合选择器
  9. 实验3-3 比较大小 (10 分)
  10. 测试礼让线程(Java)