装饰者模式(Decorator pattern)

半城伤御伤魂 提交于 2020-03-12 04:54:16

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

装饰者模式

作用:

动态给对象添加职责

典型案例:

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

类图:

Decoator

对于.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的三种实现缺乏整体的把握,想想还是暂时搁浅好了, 也太晚了点 :) 。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!