快速业务通道

设计模式重构应用---Decorator模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

设计模式重构应用---Decorator模式

时间:2011-07-25 BlogJava 陈新汉

先简单介绍Decorator 模式(装饰模式)的内容和应用场景。

装饰模式可以动态地给一个对象添加额外的职责。虽然,利用子类继承也可以实现这样的功能,但是 装饰模式提供了一个更灵活的方式。

因为继承会为类型引入的静态特质,使得这种扩展方式缺乏灵活性;

并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨 胀。

下面是标准Decorator 模式的UML结构图:

[此图来自GOF 《设计模式》一书]

现在结合我实际开发的一个例子谈谈这个模式的重构应用。

还是那个SEO的项目,涉及群登录、群发帖、群回复等功能。为了客户调用简单和代码重用,

设计的时候使用三个类来封装这些功能:SiteLogin、SitePost、SiteReply。每个站点的登录发帖回 复功能都是调用这三个类实现的。

刚开始设计时,只考虑一般HTTP协议的GET、POST请求,因为刚开始预研的时候,发现几个网站都是这 样处理登录发帖回复的。

随着后来,网站对象的不断增加,发现有下面的两个新需求:

1. 有些站点采用Content-Type为multipart/form-data的方式提交,而不是默认的application/x- www-form-urlencoded方式。

这两种方式,在httpclient 3.1 中处理方法是完全不同的(虽然4.0版本已经合并到一起了)。

2. 有些站点是采用https的方式提交的(增加额外的功能)。

3. 有些网站是这两种扩展需求都存在。

当然,为了应付这样的变数,处理方法有很多,可以在代码中直接使用if语句来判断,也可以通过子 类继承的方式增强这样的功能。

使用if语句的方式,处理这样比较大的需求,是不优雅的。子类继承的方式,在需求组合时会出现子 类数目爆炸式增长。

通过使用Decorator 模式的重构,可以比较好的处理这类问题。

最后设计的UML图如下(代码就不贴出来了):

 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号