(24)加薪非要老总批?——职责链模式

职责链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。(摘抄)

其实这个职责链模式有点像数据结构里面的并查集,找处理对象的过程,就像是找父亲的过程。

使用这种模式处理一些请求很方便,因为每一个类都可以只处理一种情况,当自己处理不了之后,就交给下一个类去处理,这样让每一个处理类都分工明确,而且转换十分灵活,可以随时增减处理对象和修改处理请求。

public abstract class Request
{
	Request request;
	
	public void setSuccessRequest(Request request)
	{
		this.request = request;
	}
	
	public abstract void doRequest(int req);
}

public class ConcreteRequest1 extends Request
{

	@Override
	public void doRequest(int req) {
		// TODO Auto-generated method stub
		if (req == 1)
		{
			System.out.println("req == 1");
		}
		else 
		{
			request.doRequest(req);
		}
	}
	
}

public class ConcreteRequest2 extends Request
{

	@Override
	public void doRequest(int req) {
		// TODO Auto-generated method stub
		if (req != 1)
		{
			System.out.println("req != 1");
		}
	}
	
}

class Client
{
	public static void main()
	{
		Request request1 = new ConcreteRequest1();
		Request request2 = new ConcreteRequest2();
		request1.setSuccessRequest(request2);
		
		request1.doRequest(1);
	}
}

通过代码可以很明显的看出只要构建好这条链那么处理只需要用这条链的头节点请求就可以了。

文章导航