责任链模式

package com.test.design.chain;

public abstract class Handler {

	private int type = 0;
	private Handler next;
	
	public Handler(int type){
		this.type = type;
	}
	
	public void setNext(Handler handler){
		this.next = handler;
	}
	
	public final void handle(Request request){
		if(request.getType() == this.type){
			this.handleRequest(request);
		}else{
			if(this.next != null){
				next.handle(request);
			}else{
				System.out.println(" do nothing!");
			}
		}
	}
	
	public abstract void handleRequest(Request request);
}

package com.test.design.chain;

public class Request {

	private int type = 0;
	
	public Request(int type){
		this.type = type;
	}
	
	public int getType(){
		return this.type;
	}
}

责任链模式屏蔽了请求的处理过程,你发起一个请求到底是谁处理的,这个你不用关心,只要你把请求抛给责任链的第一个处理者,最终会返回一个处理结果(当然也可以不做任何处理),作为请求者可以不用知道到底是需要谁来处理的。如项目开发的时候,需求确认是这样的:一个请求(比如银行客户存款的币种),一个处理者(只处理人民币),但是随着业务的发展(改革开放了嘛,还要处理美元、日元等等),处理者的数量和类型都有所增加,那这时候就可以在第一个处理者后面建立一个链,也就是责任链来处理请求,你是人民币,好,还是第一个业务逻辑来处理,你是美元,好,传递到第二个业务逻辑来处理,日元,欧元…,这些都不用在对原有的业务逻辑产生很大改变,通过扩展实现类就可以很好的解决这些需求变更的问题。

观察者模式也可以实现请求的传递,比如一个事件发生了,通知了观察者,同时观察者又作为一个被观察者,通知了另外一个观察者,这也形成了一个事件广播链,这和责任链是有区别的:
1.受众数量不同。观察者广播链式可以1:N 的方式广播,而责任链则要求是的1:1 的传递,必然有一个且只有一个类完成请求的处理;
2.请求内容不同。观察者广播链中的信息可以在传播中改变,但是责任链中的请求是不可改变的;
3.处理逻辑不同。观察者广播链主要用于触发联动动作,而责任链则是对一个类型的请求按照既定的规则进行处理。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值