设计模式(13)--职责链模式

行为型模式关注对象之间交互,对象之间的通信与协作。共十一个,职责链模式是其中之一。

为什么职责链模式属于行为型模式,因为他很好的体现了对象之间的通信与协作,职责链,就是说在这条链上的对象都有这个职责,有职责来做什么呢?处理请求。

举个例子,公司审批活动经费,小于5000,副经理就有权限审批,5000-10000,需要经理审批,10000-50000董事长审批,大于50000,召开董事会决定。

在这种情况下,如果不使用职责连模式会怎么写呢,在客户端进行金额范围判断,然后new对象处理请求。这样写下来客户端和各请求处理者(经理,董事长等)耦合性太强了,扩展性自然就很差。如果使用职责链模式呢?看下面示例:


职责链模式UML类图:


示例代码:

抽象处理者:

/****
 * 抽象处理者(经理、董事长等处理者父类)
 * @author wjw
 *
 */
public abstract class Handler {
	//处理链,当然是一条链,所以它要维护这一个链的下一个处理者的引用,如果自己处理不了,传给
	//链的下一个处理者,这样请求总会被处理,才能形成一个完整的处理链
	protected Handler handler;
	public void setHandler(Handler handler){
		this.handler = handler;
	}
	public abstract void handleRequest(int amount);
}

副经理处理者:


/****
 * 副经理类,有处理5000以下金额权限
 * @author wjw
 *
 */
public class DeputyGeneralManager extends Handler{



	@Override
	public void handleRequest(int amount) {
		// TODO Auto-generated method stub
		if(amount <= 5000 && amount > 0){
			System.out.println("我是副经理我最屌,让我来处理了这个不到5000申请吧!");
		}else{
			handler.handleRequest(amount);
		}
	}

}


经理处理者:

/****
 * 经理类(处理5000-10000)
 * @author wjw
 *
 */
public class GeneralManager extends Handler{





	@Override
	public void handleRequest(int amount) {
		// TODO Auto-generated method stub
		if(amount <= 10000 && amount > 5000){
			System.out.println("我是经理比副经理屌,让我来处理了这个5000-10000申请吧!");
		}else{
			handler.handleRequest(amount);
		}
	}

}


董事长处理者:

/****
 * 董事长(处理10000-50000)
 * @author wjw
 *
 */
public class Chairman extends Handler{



	
	

	@Override
	public void handleRequest(int amount) {
		// TODO Auto-generated method stub
		if(amount <= 50000 && amount > 10000){
			System.out.println("我是董事长比经理屌,让我来处理了这个10000-50000申请吧!");
		}else{
			handler.handleRequest(amount);
		}
	}

}


董事会处理者:

/****
 * 董事会(处理50000以上金额)
 * @author wjw
 *
 */
public class BoardOfDirectors extends Handler{






	@Override
	public void handleRequest(int amount) {
		// TODO Auto-generated method stub
		if(amount > 50000){
			System.out.println("你们都没我屌,让我来处理了这个大于50000申请吧!");
		}else{
			System.out.println("提交请求金额出错!");
		}
	}

}


Main:

public class Main {

	public static void main(String[] args) {
		Handler deputyGm, gm, chairman, bod;
		deputyGm = new DeputyGeneralManager();//副经理
		gm = new GeneralManager();//经理
		chairman = new Chairman();//董事长
		bod = new BoardOfDirectors();
		//构建职责职责链:副经理--经理--董事长--董事会
		deputyGm.setHandler(gm);
		gm.setHandler(chairman);
		chairman.setHandler(bod);
		
		//向职责链提交请求
		deputyGm.handleRequest(80000);
	}
}

运行结果:

你们都没我屌,让我来处理了这个大于50000申请吧!


职责链模式说明:以上例子很简单,主要理解职责链这个模式,职责链需要构建一个请求处理的链,这个链的修改和扩展也很容易,不必修改源代码,直接扩展处理者即可。我们有请求,直接将请求发送给职责链的一头,他自己就会按照我们的链执行下去。

就好像例子中的,我们将80000的活动经费申请报告提交给副经理,副经理一看,呀,我级别太低,不够权限批这麽多的经费,交给经理吧,经理一看,我也不行啊,给董事长吧,董事长一看,这太多了,公司是大家的,花这么多钱得大家研究研究,提交到董事会决定吧。于是走了一遍职责链。


如有错误,欢迎指正

end

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值