其实我一直都不太喜欢去死记硬背那些神马设计模式,但不得不说,你一定要对设计模式有一个大体的概念,知道什么情况下用什么设计模式就OK了。今天写了一个责任链:
Handler:
public abstract class Handler {
protected Handler nextHandler;
public Handler getNextHandler() {
return nextHandler;
}
public abstract void invoke(Object o);
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
}
FilterChain(或者叫HandlerHolder):
public class FilterChain {
private Handler rootHandler;
private Handler currentHandler;
public Handler getRootHandler() {
return rootHandler;
}
public Handler getCurrentHandler() {
return currentHandler;
}
public FilterChain setNextHandler(Handler nextHandler) {
if(null == nextHandler || nextHandler.equals(currentHandler)) {
return this;
}
//第一次设置
if(null == rootHandler) {
rootHandler = nextHandler;
this.currentHandler = nextHandler;
}else{
//非第一次,将nextHandler设置成当前handler.nextHandler
//然后将最新添加的handler设置为currentHandler
if(null != currentHandler) {
this.currentHandler.setNextHandler(nextHandler);
this.currentHandler = nextHandler;
}
}
return this;
}
}
再写两个Handler实现类:
public class DxmHandler extends Handler{
@Override
public void invoke(Object t) {
System.out.println("this is the dxm handler....");
if(nextHandler != null) {
nextHandler.invoke(0);
}
}
}
public class DdHandler extends Handler{
@Override
public void invoke(Object o) {
System.out.println("this is the dd handler....");
if(nextHandler != null) {
nextHandler.invoke(0);
}
}
}
最后测试一下:
public static void main(String[] args) {
Handler dxmHandler = new DxmHandler();
Handler ddHandler = new DdHandler();
FilterChain chain = new FilterChain();
chain.setNextHandler(dxmHandler).setNextHandler(ddHandler).setNextHandler(ddHandler);
chain.getRootHandler().invoke(new Object());
}
Game Over.