说起来惭愧,在某群解答别人问题时居然回答错误,羞煞我也。为此特地补习一下。 :(

装饰者模式

作用:

动态给对象添加职责

典型案例:

在一般的留言本中(支持UBB)输入文本,按B设置为粗体,I为斜体,实际上就是给文本动态的加上了<b>文本</b>,<I>等文字环绕</I>,而后通过解释器进行替换于是就有了最终页面的效果。这样的思路是很简单的,然而对于面向对象的实现方式来说其实还是有点麻烦的. 鉴于关于文本的例子过多,我们这里举的例子采用Stream的简化版本

类图:

对于.Net Framework中存在N种流, FileStream, MemoryStream, BinaryStream, NullStream等等,无非这些Stream都是Stream的确定实例,而通过CryptoStream的子类来对各种流进行加密解密等等功能的操作,在我们的类图里使用SecurityStream和子类HashedStreamDecorator, SHAStreamDecorator等来表示

关于实现的代码的方式则很简单,相信读者通过类图即可得到程序。实际BCL中的Stream会麻烦许多,会有很多的虚方法,Read, Seek,同步流,异步流等等,然而架构是一样的

关于动态职责的添加还有很多实现,这里还有一种AOP的方法, :)

http://msdn.microsoft.com/en-us/magazine/cc163741.aspx

关于AOP的简述:

http://msdn.microsoft.com/en-us/library/system.runtime.remoting.proxies.realproxy.aspx

CodeProject- Using AOP in C#. Free source code and programming help

http://www.geocities.com/aspectdotnet/

AOP Introducation

本来想写一个AOP实现的例子,无奈功力似乎浅了点,对于AOP的三种实现缺乏整体的把握,想想还是暂时搁浅好了, 也太晚了点 :) 。

转载于:https://www.cnblogs.com/zhzkl/archive/2008/09/08/1287190.html

装饰者模式(Decorator pattern)相关推荐

  1. C++实现装饰者模式Decorator Pattern

    设计原则5:类应该对扩展开放,对修改关闭. 目标:允许类容易扩展,在不修改现有代码的情况下,就可搭配新的行为. 好处:设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求. 遇到的问题:类数量爆 ...

  2. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)

    在前两篇博客中详细的介绍了"策略模式"和"观察者模式",今天我们就通过花瓶与鲜花的例子来类比一下"装饰模式"(Decorator Patte ...

  3. 极速理解设计模式系列:23.装饰器模式(Decorator Pattern)

    五个角色:部件(Component).具体部件(ConcreteComponent).装饰抽象类(Decorator).具体装饰对象(ConcreteDecorator).客户端(Client) 部件 ...

  4. 设计模式 -结构型模式_ 装饰者模式Decorator Pattern 在开源软件中的应用

    文章目录 定义 结构图 需求 装饰者模式 装饰者模式在MyBatis中的应用 小结 定义 装饰模式 Decorator : 在不改变原有功能的基础上, 动态的给一个对象添加一些额外的职责 ,非常符合开 ...

  5. python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  6. python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  7. 【Java设计模式系列】装饰器模式(Decorator Pattern)

    简介 一般有两种方式可以给一个类或对象新增行为: 继承 子类在拥有自身方法同时还拥有父类方法.但这种是静态的,用户无法控制增加行为的方式和时机. 关联 将一个类的对象嵌入另一个对象,由另一个对象决定是 ...

  8. decorator java_装饰器模式-Decorator(Java实现)

    装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...

  9. c语言装饰,C/C++知识点之装饰器模式(Decorator) C++

    本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...

最新文章

  1. 首批互联网地图服务牌照发放 图吧地图获得甲级服务资质
  2. 域与活动目录(下) windows server 2008
  3. C# 3.0新特性初步研究 Part5:匿名类型
  4. php include无效,php 两次include后,第一个include里的变量无效了
  5. 网络的可靠性nyoj170
  6. 一键设置mac显示选项_如何通过关闭浏览器中的一个选项卡将Mac上的电池寿命延长一倍...
  7. 给自己看的squid服务器配置笔记
  8. java hibernate 自定义排序_Java hibernate如何对条件查询结果集排序?
  9. openstack之镜像管理
  10. 跨域单点登录方案实现
  11. linux内核中union,Linux上的Union mount
  12. 配置虚拟机NAT模式连通外网并使用Xshell登陆
  13. BT和eMule协议的比较和分析
  14. PostgreSQL 11.2 手册 (中文版) PostgreSQL中文社区
  15. SCC算法求强连通分量简单讲解证明及实现
  16. 基于有赞微小店+有赞云实现的个人微信和支付宝扫码在线支付收款
  17. 关于使用stm8单片机的“外部计数”TIMx_ETR测脉冲的软件配置问题!
  18. win7安装ubuntu18.04双系统
  19. python挂机脚本怎么运行,Python实现自动挂机脚本(基础篇)
  20. 【AGV——第1篇】AGV导航方式

热门文章

  1. 阿里巴巴开源AI技术:强化学习在阿里的技术演进与业务创新
  2. 如何快速学习数据挖掘、机器学习、人工智能?(附资料包)
  3. select count mysql_mysql select count 与 select count 两个执行效率怎样
  4. 深度学习之dropout
  5. android qq robot,安卓qq授权登陆源代码
  6. 直播疑难杂症排查(1)— 播放失败
  7. [翻译]关于Swift的编译时间优化
  8. UEditor之基于Java图片上传前后端源码研究
  9. Oracle 取某100天的每一天的日期
  10. 把JS和CSS合并到1个文件