装饰者模式(Decorator pattern)
说起来惭愧,在某群解答别人问题时居然回答错误,羞煞我也。为此特地补习一下。 :(
装饰者模式
作用:
动态给对象添加职责
典型案例:
在一般的留言本中(支持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实现的例子,无奈功力似乎浅了点,对于AOP的三种实现缺乏整体的把握,想想还是暂时搁浅好了, 也太晚了点 :) 。