使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
比如有一个字符串的过滤需求,或者是大小写转换。
UML图如下:
首先定义接口
public interface Handler {
public String process(String msg);
}
定义实现类
public class DecodeHandler implements Handler{
@Override
public String process(String msg) {
System.out.println("开始解码,解码内容" + msg);
return msg;
}
}
public class UpperHandler implements Handler{
@Override
public String process(String msg) {
String upperCase = msg.toUpperCase();
System.out.println("大写转换后:" + upperCase);
return upperCase;
}
}
Handler入口类
public class HandlerChain {
private List<Handler> handlers = new LinkedList<>();
public void addHandler(Handler handler) {
this.handlers.add(handler);
}
public String process(String request) {
String r = "";
for (Handler handler : handlers) {
r = handler.process(request);
}
return r;
}
}
测试结果
public class Test {
public static void main(String[] args) {
HandlerChain chain = new HandlerChain();
chain.addHandler(new DecodeHandler());
chain.addHandler(new UpperHandler());
System.out.println("获取结果" + chain.process("w9ajsd821W"));
}
}