职责链模式

什么是职责链模式?

今天学习了职责链模式在这里引用下职责链模式的概念:职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式

画个图解吧。。。。

职责链模式_第1张图片

handler就是处理的人是一个抽象的父类包含successor属性和抽象方法自己包含自己  下面的两个就是具体处理请求的接受者,当满足接受者的情况是处理请求,否则转发请求。当一个发送请求的人发送一个请求的时候,将这个请求挨着发送给各个接受请求的人,看看能否处理,处理输出结果否则一直传递。下面举一个例子:

某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批;如果超过30天,总经理也不能审批,提示相应的拒绝信息。

根据以上例子我先上代码:

package jabari_17;

public abstract class leader {
	protected leader successor;
	
	public void setSuccessor(leader successor){
		this.successor=successor;
	}
	public abstract void leaderRequest(int d);
}
package jabari_17;

public class Director extends leader{
	public void leaderRequest(int d){
		if(d<3){
			System.err.println("主任已经批准!");
		}
		else{
			this.successor.leaderRequest(d);
		}
	}
}
package jabari_17;

public class Manager extends leader{
	public void leaderRequest(int d){
		if(d<7){
			System.err.println("经理已经批准!");
		}
		else{
			this.successor.leaderRequest(d);
		}
	}
}
package jabari_17;

public class GeneralManager extends leader{
	public void leaderRequest(int d){
		if(d<30){
			System.out.println("总经理已经批准!");
		}
		else{
			System.err.println("请假时间过长不批准!");
		}
	}

}

测试类:

package jabari_17;

public class Client {
	public static void main(String[] args) {
		leader director,manager,generalManager;
		director = new Director();
		manager = new Manager();
		generalManager = new GeneralManager();
		director.setSuccessor(manager);
		manager.setSuccessor(generalManager);
		director.leaderRequest(10);
		director.leaderRequest(50);
	}
}

这个就是完整的例子了,刚写的,也算现学现卖吧!

运行结果:

职责链模式_第2张图片

 具体又不懂得可以留言,时间关系不多说了!!

 

 

 

 

你可能感兴趣的:(软件体系结构学习)