责任链模式可以让一个对象经过一个链进行处理,这个责任可以动态生成,可以不写在代码中。
生成被过滤的对象
package com.test.protect;
public class Message {
private String content;
private String telnum;
public Message(String content, String telnum) {
super();
this.content = content;
this.telnum = telnum;
}
public String getContent() {
return content;
}
public String getTelnum() {
return telnum;
}
}
过滤类的共同抽象类
package com.test.protect;
abstract class MsgFilter {
protected MsgFilter nextFilter;
protected abstract boolean execute(Message msg);
public void handleMsg(Message msg) {
boolean over = execute(msg);
if (!over) {
if (nextFilter != null)
nextFilter.handleMsg(msg);
}
}
}
内容合法性测试类
package com.test.protect;
public class WordFilter extends MsgFilter {
public WordFilter (MsgFilter nextFilter){
this.nextFilter = nextFilter;
}
@Override
public boolean execute(Message msg) {
if (msg.getContent().indexOf("盗版光盘") >= 0) {
System.out.println(msg.getContent() + ",没有通过关键词过滤");
return true;
}
System.out.println(msg.getContent() + ",通过关键词过滤");
return false;
}
}
长度测试类
package com.test.protect;
public class LengthFilter extends MsgFilter {
public LengthFilter(MsgFilter nextFilter) {
this.nextFilter = nextFilter;
}
@Override
protected boolean execute(Message msg) {
if ((msg.getContent()).length() > 14) {
System.out.println(msg.getContent() + ",没有通过短信长度测试");
return true;
} else {
System.out.println(msg.getContent() + ",通过短信长度测试");
return false;
}
}
}
测试主类
package com.test.protect;
public class testProChain {
public static void main(String[] args) {
Message msg1 = new Message("赵红伟赵红伟赵红伟赵红伟赵红伟赵红伟","13456785434");
MsgFilter msgfilters = new WordFilter(new LengthFilter(null));
msgfilters.handleMsg(msg1);
}
}