0
点赞
收藏
分享

微信扫一扫

【设计模式】责任链1-提出问题


比方说我们做了一个BBS系统,每个人都可以在系统里发表自己的言论和信息。我们要对这些信息进行检查,看看有没有敏感要素和一些影响网站速度的脚本语言。如果不检查,网站可能会被监管部门查封。所以,在数据存入数据库的时候,要对数据进行一系列的检查。


我们创建一个Filter的工程,在cn.edu.hpu.responsiblilty包下创建一个名为Main的类:
直接假设你在网上发表一个信息:

package cn.edu.hpu.responsibility;


public class Main {
public static void main(String[] args) {
String msg="大家好:),<script>,敏感,和谐,我们要把设计模式学好";
}
}


我们要把刚刚msg里面的敏感信息和干扰脚本代码过滤掉,再新建一个类。


用来处理信息的类MsgProcessor:


package cn.edu.hpu.responsibility;

public class MsgProcessor {
private String msg;

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}


public String process(){
return "";
}
}

在Main类中这么使用它:


package cn.edu.hpu.responsibility;

public class Main {
public static void main(String[] args) {
String msg="大家好:),<script>,偷盗,抢劫,我们要把设计模式学好";
MsgProcessor mp=new MsgProcessor();
mp.setMsg(msg);
String result=mp.process();
System.out.println(result);
}
}


这个做法是“先写测试程序,在写实现”(极限编程XP里的一个理念)



下面我们来看当MsgProcessor接受到msg后如何处理:


我们先来处理带尖括号的信息:


package cn.edu.hpu.responsibility;

public class MsgProcessor {
private String msg;

public String getMsg() {
return msg;
}


public void setMsg(String msg) {
this.msg = msg;
}


public String process(){
//先处理带尖括号的信息
String r=msg.replace('<', '[')
.replace('>', ']');
return r;
}
}


Main测试结果:


大家好:),[script],偷盗,抢劫,我们要把设计模式学好




如果我们再把敏感字眼换掉或去掉呢?可以这么做:


public String process(){
//先处理带尖括号的信息
String r=msg.replace('<', '[')
.replace('>', ']');

//处理敏感字眼
r=r.replace("偷盗", "和谐")
.replace("抢劫", "帮助");
return r;
}

测试Main结果:


大家好:),[script],和谐,帮助,我们要把设计模式学好


关于敏感字眼的处理也有了。



接下来我们如果被要求处理各种符号、其它脚本语言等信息,我们要一点一点的往上面


加处理代码,会十分的被动和代码的不易拓展。



我们有没有方法把处理机制给封装起来呢?让我们往里面加一些对字符串的处理逻辑之后,


加的比较方便呢?


思考........


举报

相关推荐

0 条评论