职责链模式的结构优化
package com;public class Test {/** * 职责链模式的结构优化 * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//创建请求对象Request request = new Request();//创建具体处理者AConcreateHandlerA ca = new ConcreateHandlerA();//创建具体处理者BConcreateHandlerB cb = new ConcreateHandlerB();//创建最终处理者FinalHandler fh = new FinalHandler();//添加职责链ca.addHandler(cb);cb.addHandler(fh);//通过职责链处理请求ca.sendToHandler(request);}}运行结果:
Processing first step
Processing second step
Processing final step
package com;public class Request {//声明状态的变量public String status = "initial";//设置状态变量的方法public void setStatus(String status){this.status =status;}//获取状态变方法public String getStatus() {return status;}//处理相应的操作public void execute (String operation){System.out.println("Processing "+operation); }}package com;public interface Handler {//添加处理者方法public void addHandler(Handler handler);//发送请求对象到下一个处理者public void sendToHandler(Request request);//获取下一个处理者public Handler getHandler();}package com;public class ConcreateHandlerA implements Handler {//声明下一个处理者Handler nextHandler = null;//构造器public ConcreateHandlerA(){}//添加处理者方法@Overridepublic void addHandler(Handler handler) {nextHandler = handler;}//获取下一个处理者@Overridepublic Handler getHandler() {return nextHandler;}//发送请求对象到下一个处理者@Overridepublic void sendToHandler(Request request) {if(request.getStatus().equalsIgnoreCase("initial")){//对请求对象做相应的处理操作request.execute("first step");//为请求对象设置新的状态request.status = "first step finished";if(nextHandler != null){nextHandler.sendToHandler(request);}//如果不属于自己的职责就传递给下一个处理者}else if(nextHandler != null){nextHandler.sendToHandler(request);}}}package com;public class ConcreateHandlerB implements Handler {Handler nextHandler = null;public ConcreateHandlerB (){}@Overridepublic void addHandler(Handler handler) {nextHandler = handler;}@Overridepublic Handler getHandler() {return nextHandler;}@Overridepublic void sendToHandler(Request request) {if(request.getStatus().equalsIgnoreCase("first step finished")){request.execute("second step");request.status = "second step finished";if(nextHandler!=null){nextHandler.sendToHandler(request);}}else if(nextHandler!=null){nextHandler.sendToHandler(request);}}}package com;public class FinalHandler implements Handler {Handler nextHandler = null;public FinalHandler(){}@Overridepublic void addHandler(Handler handler) {nextHandler = handler;}@Overridepublic Handler getHandler() {return nextHandler;}@Overridepublic void sendToHandler(Request request) {if(request.getStatus().equalsIgnoreCase("second step finished")){request.execute("final step");request.status = "final step finished";if(nextHandler !=null){nextHandler.sendToHandler(request);}}else if(nextHandler !=null){nextHandler.sendToHandler(request);}}}