仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 636|回复: 9
打印 上一主题 下一主题

[学习教程] JAVA编程:利用Decorate形式完成留言版辞汇处置

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。  粉饰者形式以对客户端通明的体例静态的为对象增添义务。此形式供应了一个比承继更加天真的替换计划来扩大对象的功效,制止了承继办法发生的类激增成绩,并且更便利变动对象的义务。

  我们常常要为某一些一般的对象增添一些新的职责,并非全体的类。比方我们体系留言反应板块中大概必要过滤用户输出留言中的一些辞汇(比方政治敏感辞汇、色情辞汇等)、还大概对用户输出留言举行一些润色(比方对用户输出的URL主动加上超链接、对用户输出的UBB代码举行转换的)、还大概将用户输出的内容准时发送的网管的邮箱中等等。假如利用类承继的体例举行计划,我们大概要计划一个接口

  BodyContentFilterIntf,然后在由BodyContentFilterIntf派生出SensitiveWordContentFilter、HtmlContentFilter、SendEmailContentFilter等类。可是假如还要请求同时能过滤敏感辞汇并能举行润色、大概过滤敏感辞汇以后把用户输出的留言发送到网管邮箱等等,如许就要增添SensitiveWordHtmlContentFilter、SensitiveWordSendEmaillContentFilter等类,这类体例招致了子类瀑发式的发生。

  一个天真的办法是将过滤器嵌进另外一个过滤器中,由这个过滤器来卖力挪用被嵌进过滤器的办法并实行本人的过滤器办法。我们称这个嵌进的过滤器为粉饰(Decorator)。这个粉饰与过滤器接口分歧。粉饰将哀求向前转到到另外一个过滤器,而且大概能转发前后实行一些分外的举措(如润色、发送邮件),通明性使你能够递回的嵌套多个粉饰,从面能够增加恣意多的功效。

  实在java中的过滤器形式使用十分多,典范的就是IO的Stream操纵。在IO处置中,Java将数据笼统为流(Stream)。在IO库中,最基础的是InputStream和OutputStream两个分离处置输入和输出的对象,可是在InputStream和OutputStream中之供应了最复杂的流处置办法,只能读进/写出字符,没有缓冲处置,没法处置文件,等等。

  LineNumberInputStream、BufferInputStream、StringBufferInputStream等供应各类分歧服务的类只需组合起来就能够完成良多功效,以下:

FilterInputStreammyStream=newLineNumberInputStream
(newBufferInputStream(newStringBufferInputStream(myStringBuffer)));
  多个的Decorator被层叠在一同,最初失掉一个功效壮大的流。既可以被缓冲,又可以失掉行数,这就是Decorator的能力!

  上面是我们的类静态图





  我们界说一个接口BodyContentFilterIntf来界说一切过滤器要完成的办法:

publicinterfaceBodyContentFilterIntf{
 publicStringfiltContent(StringaContent)throwsContentFilterException;
}
  这个接口中只要一个办法filtContent,将要过滤的留言传给aContent参数,filtContent对aContent举行一些处置(如粉饰URL、UBB等),然后将处置后的字符串做为前往值前往;假如留言没有经由过程过滤(如含有敏感辞汇等),只需抛出自界说ContentFilterException非常便可。

  上面是一个大概的一个过滤器(包管输出的字数多于50):

publicclassLengthContentFilter

implementsBodyContentFilterIntf{
 privateBodyContentFilterIntfbodyContentFilterIntf=null;
 publicHtmlContentFilter(BodyContentFilterIntfaFilter)
 {
  bodyContentFilterIntf=aFilter;
 }

 publicStringfiltContent(StringaContent)throwsContentFilterException{
  Stringl_Content=aContent;
  If(bodyContentFilterIntf!=null)
   _Content=bodyContentFilterIntf.filtContent(l_Content);
  if(aContent.length()<=50)
   thrownewContentFilterException(“输出的字数不克不及少于50!”);
    returnaContext;
 }
}
  这是另外一个过滤器(伪码,用来完成向网管邮箱发送邮件)publicclassSendEmailContentFilter

implementsBodyContentFilterIntf{
 privateBodyContentFilterIntfbodyContentFilterIntf=null;
 publicSendEmailContentFilter(BodyContentFilterIntfaFilter)
 {
  bodyContentFilterIntf=aFilter;
 }

 publicStringfiltContent(StringaContent)throwsContentFilterException{
  Stringl_Content=aContent;
  if(bodyContentFilterIntf!=null)
   l_Content=bodyContentFilterIntf.filtContent(l_Content);
   SendEmail(“webmaster@SnailWeb.com”,l_Content)
  returnaContext;
 }
}
  固然另有SensitiveWordContextFilter(过滤敏感辞汇),HtmlContentFilter(润色用户输出留言中的超等链接)等。

  有了这些过滤器,我们就能够很便利的为留言版增加各类复合的过滤器。比方我们想对输出的留言举行超链接润色和过滤敏感辞汇,那末我们只需以下挪用便可:

try{
 l_Content=newHtmlContentFilter(newSensitiveWordContextFilter(null)).
 filtContent(bodyContext);
}

catch(ContentFilterExceptionex){
 BBSCommon.showMsgInResponse(response,ex.getMessage());
 return;
}
  我们乃至能够静态的增加分歧的过滤器,比方关于会员我们要对输出的留言举行超链接润色而且将他的留言发送到网管邮箱,而关于非会员我们则要过滤他输出的敏感辞汇而且包管输出的字数很多于50,我们只需以下挪用便可:

try{
 BodyContentFilterIntfbodyContentFilterIntf=null;
 bodyContentFilterIntf=newHtmlContentFilter(null);
 if(IsMember==true)
  bodyContentFilterIntf=newsendEmailContentFilter(bodyContentFilterIntf);
 else
  bodyContentFilterIntf=newSensitiveWordContextFilter(bodyContentFilterIntf);
 l_Content=bodyContentFilterIntf.filtContent(bodyContext);
}
catch(ContentFilterExceptionex){
 BBSCommon.showMsgInResponse(response,ex.getMessage());
 return;
}
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。
沙发
发表于 2015-1-20 18:03:15 来自手机 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-29 13:53:41 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
因胸联盟 该用户已被删除
地板
发表于 2015-1-30 18:21:37 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
透明 该用户已被删除
5#
发表于 2015-2-3 12:44:30 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
分手快乐 该用户已被删除
6#
发表于 2015-2-4 20:32:31 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
金色的骷髅 该用户已被删除
7#
发表于 2015-2-10 07:06:08 | 只看该作者
是一种使用者不需花费很多时间学习的语言
蒙在股里 该用户已被删除
8#
发表于 2015-2-24 22:35:25 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-6 08:56:21 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-12 22:55:02 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-11 05:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表