设计模式之责任链模式

内容抄自《设计模式》清华大学出版社,2011

模式动机:
客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者和处理者解耦

模式定义:
避免请求发送者和接收者耦合在一起,将这些对象连接成一条链,并沿着这条链传递请求,
直到有对象处理它为止。

结构分析:

包含角色:
1.Handler(抽象处理者)
2.ConcreteHandler(具体处理者)

模式分析:

public abstract class Handler{
    protected Handler next;
    public abstract void opreation();
}

public class ConcreteHandler extends Handler{
    @Overrides
    public void opreation(){
        if(xxx) do;
        else this.next.opreation();
    }
}

优点:
1.降低耦合度:使得一个对象无须知道是谁处理该请求。
2.简化对象的相互连接。
3.增加给对象指派职责的灵活性

缺点:
1.不能保证请求一定被接收
2.增加复杂性,不方便调试,可能会造成死循环

适用环境:
1.有多个对象可以处理一个请求,具体哪个对象处理该请求由运行时刻自动确定
2.在不明确指定接收者的情况下,自动寻找。
3.可以动态指定一组对象处理请求。

栗子:

public class Example {
	static abstract class User{
		protected User next;
		public void setNext(User next) {
			this.next = next;
		}
		public abstract void check(Leave leave);
	}
	static class ZongJian extends User{
		@Override
		public void check(Leave leave) {
			if(leave.day<5){
				System.out.println("总监审批了");
			}
			else{
				this.next.check(leave);
			}
		}
	}
	static class JingLi extends User{
		@Override
		public void check(Leave leave) {
			if(leave.day<10){
				System.out.println("经理审批了");
			}
			else{
				this.next.check(leave);
			}
		}
	}
	static class LaoBan extends User{
		@Override
		public void check(Leave leave) {
			if(leave.day<15){
				System.out.println("老板审批了");
			}
			else{
				System.out.println("你他妈是不是想辞职");
			}
		}
	}
	static class Leave{
		public int day;
		public String name;
		public Leave(int day, String name) {
			this.day = day;
			this.name = name;
		}
	}
	public static void main(String[] args) {
		User user1 = new ZongJian();
		User user2 = new JingLi();
		User user3 = new LaoBan();
		user1.setNext(user2);
		user2.setNext(user3);
		user1.check(new Leave(15,"小明"));
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值