知识大全 使用Decorate模式实现留言版词汇处理
Posted 词汇
篇首语:有志者事竟成,破釜沉舟,百二秦关终属楚。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用Decorate模式实现留言版词汇处理相关的知识,希望对你有一定的参考价值。
使用Decorate模式实现留言版词汇处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
装饰者模式以对客户端透明的方式动态的为对象增加责任 此模式提供了一个比继承更为灵活的替代方案来扩展对象的功能 避免了继承方法产生的类激增问题 而且更方便更改对象的责任
我们经常要为某一些个别的对象增加一些新的职责 并不是全部的类 例如我们系统留言反馈板块中可能需要过滤用户输入留言中的一些词汇(例如政治敏感词 汇 色情词汇等) 还可能对用户输入留言进行一些修饰(例如对用户输入的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的威力!
我们定义一个接口BodyContentFilterIntf 来定义所有过滤器要实现的方法
public interface BodyContentFilterIntf
public String filtContent(String aContent) throws ContentFilterException;
这个接口中只有一个方法filtContent 将要过滤的留言传给aContent参数 filtContent对aContent进行一些处理(如 装饰URL UBB等) 然后将处理后的字符串做为返回值返回 如果留言没有通过过滤(如含有敏感词汇等) 只要抛出自定义 ContentFilterException异常即可
下面是一个可能的一个过滤器(保证输入的字数多于 )
public class LengthContentFilter
implements BodyContentFilterIntf
private BodyContentFilterIntf bodyContentFilterIntf = null;
public HtmlContentFilter(BodyContentFilterIntf aFilter)
bodyContentFilterIntf = aFilter;
public String filtContent(String aContent) throws ContentFilterException
String l_Content = aContent;
If (bodyContentFilterIntf!=null)
_Content = bodyContentFilterIntf filtContent(l_Content);
if (aContent length()<= )
throw new ContentFilterException ( 输入的字数不能少于 ! );
return aContext;
这是另一个过滤器(伪码 用来实现向网管邮箱发送邮件) public class SendEmailContentFilter
implements BodyContentFilterIntf
private BodyContentFilterIntf bodyContentFilterIntf = null;
public SendEmailContentFilter(BodyContentFilterIntf aFilter)
bodyContentFilterIntf = aFilter;
public String filtContent(String aContent) throws ContentFilterException
String l_Content = aContent;
if (bodyContentFilterIntf!=null)
l_Content = bodyContentFilterIntf filtContent(l_Content);
SendEmail( we l_Content)
return aContext;
当然还有SensitiveWordContextFilter(过滤敏感词汇) HtmlContentFilter(修饰用户输入留言中的超级链接)等
有了这些过滤器 我们就可以很方便的为留言版添加各种复合的过滤器 例如我们想对输入的留言进行超链接修饰和过滤敏感词汇 那么我们只要如下调用即可
try
l_Content = new HtmlContentFilter(new SensitiveWordContextFilter(null))
filtContent(bodyContext);
catch (ContentFilterException ex)
BBSCommon showMsgInResponse(response ex getMessage());
return;
我们甚至可以动态的添加不同的过滤器 例如对于会员我们要对输入的留言进行超链接修饰并且将他的留言发送到网管邮箱 而对于非会员我们则要过滤他输入的敏感词汇并且保证输入的字数不少于 我们只要如下调用即可
try
BodyContentFilterIntf bodyContentFilterIntf = null;
bodyContentFilterIntf = new HtmlContentFilter(null);
if(IsMember==true)
bodyContentFilterIntf = new sendEmailContentFilter(bodyContentFilterIntf);
else
bodyContentFilterIntf = new SensitiveWordContextFilter(bodyContentFilterIntf);
l_Content = bodyContentFilterIntf filtContent(bodyContext);
catch (ContentFilterException ex)
BBSCommon showMsgInResponse(response ex getMessage());
return;
cha138/Article/program/Java/gj/201311/27457相关参考
知识大全 asp有效防止网站留言板出现垃圾留言/评论实现思路
一在表单填写页面:<inputname=intimetype=hiddenvalue="<%=Now()%>">在提交处理页面设置提交时间代码如下:IfDateDiff("
求一个“您好,我现在有事请留言。我会尽快回复您电话!”的留言声音我已经传到QQ中转站了请尽快下载下载地址已经发到你的百度HI在酷狗找。自己录不就好了?我想要一段声音“您好我现在不在有事请留言我会尽快回
知识大全 一个女生开小号用追她的人的语气给自己留言板刷留言。请大家分析下这女的。大神们帮帮忙
一个女生开小号用追她的人的语气给自己留言板刷留言。请大家分析下这女的。大神们帮帮忙多与他沟通记得采纳啊空间留言板留言可以一下清除吗大神们帮帮忙可以的,你可以把他删除,但是会扣除你空间相应的分数(花藤里
利用C#制作简单的留言板 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 留言板分三个模块列出留言
女孩们为啥不喜欢朋友圈点赞留言?你理解错了,她喜欢别人给她点赞留言,但是不喜欢给别人点赞留言啊!不喜欢在朋友圈点赞是什么心态一个是习惯问题,再就是朋友圈发的内容实在没什么意思不遮蔽就不错了不喜欢你的女
ASP.Net+XML打造留言薄 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一.概述 留言
JavaScript实现发表留言添加表情功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!代码如下
ASP.NET项目开发指南:留言回复 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET项目开发指南:留言删除 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
苏教版五年级下册数学练习册期中测试的答案!要所有的!不想提供答案的请勿留言!作文现象文苏教版五年级下册数学练习测试答案因为自控能力较低,基础差所以就非常会依赖答案,在网上是问不到答案的哈这种情况反而要