设计模式之责任链模式

一、定义:责任链模式使第一个对象处理请求,然后一次向下传递请求,直到有一个合适的对象能够处理他,从而避免的调用者依次去询问各个对象造成的多耦合关系。Avoid coupling the sender  of a request to its receiver by giving more than one object a chance to handle the request. Chain the reviever objects and pass the request along the chain until an object handles it


二、简单代码示例:

public abstract class Handler {
	private Handler nextHandler;
	private String myName;
	private Integer request;

	public void setNextHandler(Handler nextHandler) {
		this.nextHandler = nextHandler;
	}

	public void setMyName(String myName) {
		this.myName = myName;
	}

	public void setRequest(Integer request) {
		this.request = request;
	}

	public final String handleMessage(int request) {
		if (request == this.request)
			return myName;
		else if (this.nextHandler != null)
			return this.nextHandler.handleMessage(request);
		else
			return "No one";
	}


处理者:

public class Object1 extends Handler {
	public Object1(String name, int age, Handler next) {
		setMyName(name);
		setRequest(age);
		setNextHandler(next);
	}
	
	//Other method in object1
}
public class Object2 extends Handler {
	public Object2(String name, int age, Handler next) {
		setMyName(name);
		setRequest(age);
		setNextHandler(next);
	}
	
	//other method in Object2
}
public class Object3 extends Handler {
	public Object3(String name, int age, Handler next) {
		setMyName(name);
		setRequest(age);
		setNextHandler(next);
	}


	// other method in Object3
}

场景调用:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Handler handler3 = new Object3("小红", 12, null);
		Handler handler2 = new Object3("小明", 11, handler3);
		Handler handler1 = new Object3("小芳", 10, handler2);

		System.out.println("谁的年纪是12岁啊?");
		System.out.println(handler1.handleMessage(12));

		System.out.println("谁的年纪是13岁啊?");
		System.out.println(handler1.handleMessage(13));

	}

谁的年纪是12岁啊?
小红
谁的年纪是13岁啊?
No one

责任链模式十分简单。其减少了场景调用的耦合关系。请求者可以不用知道是谁处理的,只要知道结果即可。正如DNS的域名解析过程。

责任链过长的话,会给性能带来一定影响,同时使得调试变得复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值