设计模式之职责链模式

职责链设计模式

*职责链设计模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
* 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理位置。


职责链设计模式的角色:

请求处理者接口(Handler):定义一个处理请求的接口,可以实现后继链;

请求处理者实现(ConcreteHandler):请求处理接口的实现,如果它可以处理请求,就处理,否则就将该请求转发给它的后继者。


Handler类,定义一个处理请求的接口。


/**
 * 定义一个处理请求的接口
 * @author zzj
 *
 */
public abstract class Handler {
	
	//持有后继的责任对象
	protected Handler successor;
	
	//设置后继的责任对象
	public void setSuccssor(Handler successor){
		this.successor = successor;
	}
	//处理对象
	public abstract void HandlerRequest(int request);
	

}


* 具体处理者类
* 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。

/**
 * 具体处理者类
 * 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
 * @author zzj
 *
 */
public class ConcreteHandler1 extends Handler {

	@Override
	public void HandlerRequest(int request) {
		if(request >= 0 && request < 10){
			System.out.println("ConcreteHandler1处理请求"+request);
		}else if(successor != null){
			//转移到下一位
			successor.HandlerRequest(request);
		}
	}

}

/**
 * 具体处理者类
 * 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
 * @author zzj
 *
 */
public class ConcreteHandler2 extends Handler {

	@Override
	public void HandlerRequest(int request) {
		if(request >= 10 && request < 20){
			System.out.println("ConcreteHandler2处理请求"+request);
		}else if(successor != null){
			successor.HandlerRequest(request);
		}
	}

}

/**
 * 具体处理者类
 * 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。
 * @author zzj
 *
 */
public class ConcreteHandler3 extends Handler {

	@Override
	public void HandlerRequest(int request) {
		if(request >= 20 && request < 30){
			System.out.println("ConcreteHandler3处理请求"+request);
		}else if(successor != null){
			successor.HandlerRequest(request);
		}
	}

}

客户端代码,向链上的具体处理者对象提交请求

public class Test {
	public static void main(String[] args){
		//设置职责链
		Handler handler1 = new ConcreteHandler1();
		Handler handler2 = new ConcreteHandler2();
		Handler handler3 = new ConcreteHandler3();
		handler1.setSuccssor(handler2);
		handler2.setSuccssor(handler3);
		
		int[] requests = {2,8,10,15,20,25,30};
		for(int request : requests){
			handler1.HandlerRequest(request);
		}
	}

}

输出结果:

ConcreteHandler1处理请求2
ConcreteHandler1处理请求8
ConcreteHandler2处理请求10
ConcreteHandler2处理请求15
ConcreteHandler3处理请求20
ConcreteHandler3处理请求25




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值