设计模式之责任链模式

一、概述

责任链模式属于行为型模式的一种,从字面上可理解为由多个节点对象所形成的一条链,每个节点对象拥有相同的结构,并拥有指向下一个处理事件的节点对象的引用,使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,这些处理请求的对象按一定的顺序形成一条链,并沿着这条链处理请求,直到该事件被消费了为止。



二、应用场景

当一个请求发生时,有多个对象可以接收并处理该请求,当无非消费该请求时,则传递给下一处理请求的对象,在android中的点击事件分发机制也是属于责任链模式,viewgroup接收到点击事件后分发给子view,下一级的子view如果没有消费该事件即onTouchEvent中返回了false,则继续把事件传递给下一级的子view,直到有子view消费了该事件为止。现实生活中也有同样的例子,有时你需要查看一些公司的文档,但是权限不够,你就去找你的直系领导,你的直系领导权限不够就再继续向上一级发出查看该文档的请求,直到有足够权限的领导批准并把文档给了你则该请求处理完毕,你也可以不用一层层的往上传递该请求,可以越级直接把该请求发送给足够权限的领导处理。

三、简单示例

/*
 * 抽象处理者
 */
public abstract class Handler {
	//下一处理者节点
    protected Handler nextHandler;
    public abstract void handleRequest(int request);
    public abstract int getLevel();
}

/*
 * 具体的请求处理者1
 */
public class ConcreteHandler1 extends Handler{

	@Override
	public void handleRequest(int request) {
		// TODO Auto-generated method stub
		if (request == getLevel()) {
			System.out.println("have handled");
		} else {
			nextHandler.handleRequest(request);
		}
	}

	@Override
	public int getLevel() {
		// TODO Auto-generated method stub
		return 1;
	}

}

/*
 * 具体的请求处理者2
 */
public class ConcreteHandler2 extends Handler{

	@Override
	public void handleRequest(int request) {
		// TODO Auto-generated method stub
		if (request == getLevel()) {
			System.out.println("have handled");
		} else {
			nextHandler.handleRequest(request);
		}
	}

	@Override
	public int getLevel() {
		// TODO Auto-generated method stub
		return 2;
	}

}
public class RequestClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
         ConcreteHandler1 handler1 = new ConcreteHandler1();
         ConcreteHandler2 handler2 = new ConcreteHandler2();
         handler1.nextHandler = handler2;
         handler2.nextHandler = handler1;
         handler1.handleRequest(1);
	}

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值