设计模式之责任链模式

转载请注明出处:http://blog.csdn.net/droyon/article/details/8708753

定义:创建一个对象链,每个对象对请求依次检查,并对其处理,或者将它传给链中的下一个对象。

应用;经常用在窗口系统中,处理点击事件等,如果点击事件在某个窗口对象上消耗了,那么此点击事件不再继续往下传送。

责任链模式关键在于运用某种关系是对象之间形成链,这个关系可以是继承,也可以是组合。

代码下载

案例:

在公司制度中,部门经理有权处理请假日期小于等于三天的事务,如果请假日期多余三天,那么需要老总批准。

Responsibility.java

public abstract class Responsibility {
	private Responsibility mSuccessor;
	
	public Responsibility getmSuccessor() {
		return mSuccessor;
	}


	public void setmSuccessor(Responsibility mSuccessor) {
		this.mSuccessor = mSuccessor;
	}


	abstract void handle(int holiday);
}

Manager.java

public class Manager extends Responsibility{
	public Manager(){
		System.out.println("部门经理,请假三天以内,我可以批准");
	}
	@Override
	void handle(int holiday) {
		if(holiday>3){
			System.out.println("交由老总来批准");
			Responsibility responsibility = getmSuccessor();
			if(responsibility !=null){
				responsibility.handle(holiday);
			}
		}else{
			System.out.println("批准了");
		}
	}

}

Boss.java

public class Boss extends Responsibility{
	public Boss(){
		System.out.println("我是老总,请假超过3天需要我批准");
	}
	@Override
	void handle(int holiday) {
		if(holiday >3){
			System.out.println("批准了");
		}
	}

}

Test.java

/**
 * 请假三天以内,部门经理可以批准,三天以上需要报请老总批准
 * @author
 *
 */
public class Test {
	public static void main(String args[]){
		Manager manager = new Manager();
		Boss boss = new Boss();
		manager.setmSuccessor(boss);
		System.out.println("----------------------------------");
		int holiday = 4;
		System.out.println("我要请假,请假天数:"+holiday);
		manager.handle(holiday);
	}
}

运行结果:

部门经理,请假三天以内,我可以批准
我是老总,请假超过3天需要我批准
----------------------------------
我要请假,请假天数:4
交由老总来批准
批准了

总结:责任链模式的优点,可以简化对象,因为它不需要知道链的结构。责任链模式让请求的发送者与接受者解耦。通过改变链内的成员或调用他们的次序,允许你动态的新增或者删除责任。


关于责任链模式的更多介绍http://guafei.iteye.com/blog/913388

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值