装饰模式(Decorator Pattern

——.NET设计模式系列之十

年月..在....对于..由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。

适用性

在以下情况下应当使用装饰模式:

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

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

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

总结

Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。同时它很好地符合面向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。

参考资料

阎宏,《Java与模式》,电子工业出版社

James W. Cooper,《C#设计模式》,电子工业出版社

Alan Shalloway James R. Trott,《Design Patterns Explained》,中国电力出版社

MSDN WebCast 《C#面向对象设计模式纵横谈(10) Decorator装饰模式(结构型模式)》

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

最新文章

  1. .NET框架解决的问题
  2. 关于Spring中配置LocalSessionFactoryBean来生成SessionFactory
  3. 【整理贴】DBA-常用到的动态视图分析语句
  4. lintcode 中等题:Letter Combinations of a Phone Number 电话号码的字母组合
  5. linux内核书籍
  6. C++11多线程教学(二)
  7. javascript正则表达式简述
  8. hibernate懒加载导致jackjson解析json时StackOverFlow
  9. TCP的ACK确认系列 — 发送状态转换机
  10. 机器学习之十一问支持向量机(SVM)
  11. mysql执行sql脚本文件
  12. HDU 1159:Common Subsequence(LCS模板)
  13. 在Java中,以下关于方法重载和方法重写描述正确的是?
  14. @Secured()、 @PreAuthorize() 、 @RolesAllowed()
  15. @Autowired和@Resource装配
  16. 【codeforces-482div2-C】Kuro and Walking Route(DFS)
  17. iOS开发中如遇到频繁的Http请求,取消之前已经发送的Http
  18. Swift培训
  19. PL/SQL规范、块、过程、函数、包、触发器
  20. MyBatis02 MyBatis基础知识之Mapper映射器

热门文章

  1. Bear 實驗室: 什麼是Git flow ? 如何在SourceTree使用Git flow管理開發!
  2. Performance Counter的使用
  3. lfs遇到的一些问题--编制LFS
  4. WCF、.Net Remoting、Web Service概念及区别
  5. php连接mysql数据库练手
  6. 关于vim打开中文文件出现乱码问题
  7. 字符串hash函数
  8. php 获取目录下文件列表
  9. gist c code
  10. DNS的查找机制、中文扩展,及其对手机扫描商标名称的支持