责任链模式

责任链模式为请求创建了一个接受者的对象的链。这种模式对给予请求的类型,对请求的发送者和接受者进行解耦。属于行为型模式。

在这种模式中,通常每个接受者都包含对另一个接受者的引用。如果一个对象不能处理该请求,那么他会把相同的请求传给下一个接受者。以此类推。

应用实例:servlet的Filter,过滤器和拦截器都是基于此模式的。

/**
 * 
 * 请求类
 *
 */
public class BrrowRequest {
	private int requestMoney;
	
	
	public BrrowRequest(int requestMoney){
		this.requestMoney = requestMoney;
		System.out.println("有人借钱 "+requestMoney+" 元");
	}


	public int getRequestMoney() {
		return requestMoney;
	}
}
/*
 * 抽象处理结点类
 */
abstract class AbstractPerson {
	
	//下一个结点
	private AbstractPerson superPerson;
	
	//处理结点的名称
	protected String typePerson;

	public void setSuperPerson(AbstractPerson superPerson) {
		this.superPerson = superPerson;
	}
	//该结点可以处理的额度
	public abstract int getLimit();
	
	//获得该结点名称
	public String getType(){
		return typePerson;
	}
	
	//具体的处理细节
	public void detailRequest(BrrowRequest br){		
		if(getLimit() >= br.getRequestMoney()){
			System.out.println(getType()+"可以处理借款");
		}else{		
			if(this.superPerson != null){
				this.superPerson.detailRequest(br);
			}else{
				System.out.println("没有人可以处理借款");			
			}
		}
	}	
}
/*
 * 具体处理类
 */
public class Clerk extends AbstractPerson {

	public Clerk(){
		super.typePerson = "职员";
	}
	
	@Override
	public int getLimit() {		
		return 1000;
	}	
}
/*
 * 具体处理类
 */
public class Counter extends AbstractPerson {

	public Counter(){
		super.typePerson = "柜台";
	}
	
	@Override
	public int getLimit() {
		return 2000;
	}
}
/*
 * 具体处理类
 */
public class Manager extends AbstractPerson {

	public Manager() {
		super.typePerson = "经理";
	}
	
	@Override
	public int getLimit() {
		// TODO 自动生成的方法存根
		return 5000;
	}
}
public class Main {
	public static void main(String[] args) {
		
		AbstractPerson c = new Clerk();
		AbstractPerson co = new Counter();
		AbstractPerson m = new Manager();
		
		//请求
		BrrowRequest b = new BrrowRequest(7000);
		
		//构建请求处理链
		c.setSuperPerson(co);
		co.setSuperPerson(m);
		
		c.detailRequest(b);
	}
}

抽象出一个处理结点(AbstractPerson),所以的具体实现结点(Clerk,Counter,Manager)都继承这个结点,实现自定义的数据,最后传进来一个请求,通过某种方法对请求判断,看自己这个结点可不可以处理,否则交由下一个结点继续处理。

参考:https://zhuanlan.zhihu.com/p/24737592


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值