什么是职责链模式?
今天学习了职责链模式,在这里引用下职责链模式的概念:职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。
画个图解吧。。。。
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);
}
}
这个就是完整的例子了,刚写的,也算现学现卖吧!
运行结果:
具体又不懂得可以留言,时间关系不多说了!!