装饰者模式(Decorator pattern)

本文探讨了装饰者模式在动态给对象添加职责的应用,并通过.NET Framework中的Stream类进行了简化说明。此外,还介绍了面向切面编程(AOP)的概念及其在实现动态职责添加方面的另一种方法。

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

装饰者模式

作用:

动态给对象添加职责

典型案例:

在一般的留言本中(支持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的三种实现缺乏整体的把握,想想还是暂时搁浅好了, 也太晚了点 :) 。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值