职责链模式的结构优化


package com;

public class Test {

/**
* 职责链模式的结构优化
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建请求对象
Request request = new Request();
//创建具体处理者A
ConcreateHandlerA ca = new ConcreateHandlerA();
//创建具体处理者B
ConcreateHandlerB 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(){

}
//添加处理者方法
@Override
public void addHandler(Handler handler) {
nextHandler = handler;

}
//获取下一个处理者
@Override
public Handler getHandler() {
return nextHandler;
}

//发送请求对象到下一个处理者
@Override
public 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 (){

}

@Override
public void addHandler(Handler handler) {
nextHandler = handler;
}

@Override
public Handler getHandler() {
return nextHandler;
}

@Override
public 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(){

}
@Override
public void addHandler(Handler handler) {
nextHandler = handler;
}

@Override
public Handler getHandler() {
return nextHandler;
}

@Override
public 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);
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值