文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络网络编程PHP使用Decorate模式实现留言版词汇处理
精品推荐
特别推荐
·Apache指南:.htaccess文件使用手册
·结合PHP使用HTML表单
·初学PHP的基础例程
·菜鸟学PHP之Smarty入门
·PHP环境安全配置教程
·PHP入门指导:如何学习PHP?
·Php+Mysql注入专题
·PHP:实现给上传图片加水印的程序代码
热点TOP10
·PHP实现的简单日历代码
·关于Html嵌入打成jar包的Applet方法
·PHPBB3跟网站结合,实现登入网站同时登入论坛
·IIS与Apache共用80端口方法
·教你20法 轻轻松松把 Apache 配置安全
·J2ME游戏开发的高级优化技巧
·谈select列表框
·用MVC模型引导你的WEB设计思路

使用Decorate模式实现留言版词汇处理

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]

  装饰者模式以对客户端透明的方式动态的为对象增加责任。此模式提供了一个比继承更为灵活的替代方案来扩展对象的功能,避免了继承方法产生的类激增问题,而且更方便更改对象的责任。

  我们经常要为某一些个别的对象增加一些新的职责,并不是全部的类。例如我们系统留言反馈板块中可能需要过滤用户输入留言中的一些词汇(例如政治敏感词汇、色情词汇等)、还可能对用户输入留言进行一些修饰(例如对用户输入的URL自动加上超链接、对用户输入的UBB代码进行转换的)、还可能将用户输入的内容定时发送的网管的邮箱中等等。如果使用类继承的方式进行设计,我们可能要设计一个接口

  BodyContentFilterIntf,然后在由BodyContentFilterIntf派生出SensitiveWordContentFilter、HtmlContentFilter、SendEmailContentFilter等类。但是如果还要要求同时能过滤敏感词汇并能进行修饰、或者过滤敏感词汇之后把用户输入的留言发送到网管邮箱等等,这样就要增加SensitiveWordHtmlContentFilter、SensitiveWordSendEmaillContentFilter等类,这种方式导致了子类瀑发式的产生。

  一个灵活的方法是将过滤器嵌入另一个过滤器中,由这个过滤器来负责调用被嵌入过滤器的方法并执行自己的过滤器方法。我们称这个嵌入的过滤器为装饰(Decorator)。这个装饰与过滤器接口一致。装饰将请求向前转到到另一个过滤器,并且可能能转发前后执行一些额外的动作(如修饰、发送邮件),透明性使你可以递归的嵌套多个装饰,从面可以添加任意多的功能。

  其实java中的过滤器模式应用非常多,典型的就是IO的Stream操作。在IO处理中,Java将数据抽象为流(Stream)。在IO库中,最基本的是InputStream和OutputStream两个分别处理输出和输入的对象,但是在InputStream和OutputStream中之提供了最简单的流处理方法,只能读入/写出字符,没有缓冲处理,无法处理文件,等等。

  LineNumberInputStream、BufferInputStream、StringBufferInputStream等提供各种不同服务的类只要组合起来就可以实现很多功能,如下:

FilterInputStream myStream=new LineNumberInputStream
( new BufferInputStream( new StringBufferInputStream( myStringBuffer)));

  多个的Decorator被层叠在一起,最后得到一个功能强大的流。既能够被缓冲,又能够得到行数,这就是Decorator的威力!

  下面是我们的类静态图

使用Decorate模式实现留言版词汇处理


  我们定义一个接口BodyContentFilterIntf 来定义所有过滤器要实现的方法:

public interface BodyContentFilterIntf {
 public String filtContent(String aContent) throws ContentFilterException;
}

  这个接口中只有一个方法filtContent,将要过滤的留言传给aContent参数,filtContent对aContent进行一些处理(如装饰URL、UBB等),然后将处理后的字符串做为返回值返回;如果留言没有通过过滤(如含有敏感词汇等),只要抛出自定义ContentFilterException异常即可。

  下面是一个可能的一个过滤器(保证输入的字数多于50):

public class LengthContentFilter

implements BodyContentFilterIntf {
 private BodyContentFilterIntf bodyContentFilterIntf = null;
 public HtmlContentFilter(BodyContentFilterIntf aFilter)

[1] [2] [3] 下一页 



上一篇:日前和时间的操作

下一篇:使用WEBLOGIC PORTAL规则引擎中实现动态业务逻辑
相关文章:
·Photoshop把偏色照片处理成仿手绘效果
·ASP.NET:根据IP获取当地天气预报的实现
·Excel97使用技巧42招
·Outlook Express使用技巧大全之提高篇
·JAVA实现拼图游戏
·通讯录的源代码(用链表实现)
·Photoshop画笔工具基本使用
相关软件:
·黑客视频教程 VMware虚拟机的安装和使用
·Auto CAD R14高级使用教程
·Office使用完全手册
·四级考试重点词汇和历年真题word文档
·英语四级 星火英语-15篇文章贯通四级词汇 MP3
·使用GPMC随心所欲管理组策略
·黑客视频教程-灰鸽子远控使用教程

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot