责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
结构图
简述:下列代码描述了一种福场景,经理、总监和总经理可以处理的请求范围
代码:
public abstract class Manager {
protected String name;
protected Manager superior;
public Manager(String name){
this.name=name;
}
public void setSuperior(Manager superior) {
this.superior = superior;
}
public abstract void requestHandler(String request,int amount);
}
public class CommonManger extends Manager {
public CommonManger(String name){
super(name);
}
public void setSuperior(Manager superior) {
super.setSuperior(superior);
}
@Override
public void requestHandler(String request,int amount) {
if("请假".equals(request)&&amount<=2){
System.out.println(name+"批准:"+request+" 数量:"+amount);
}else{
if(superior!=null){
superior.requestHandler(request, amount);
}
}
}
}public class Major extends Manager {
public Major(String name){
super(name);
}
public void setSuperior(Manager superior) {
super.setSuperior(superior);
}
@Override
public void requestHandler(String request, int amount) {
if("请假".equals(request)&&amount<=5){
System.out.println(name+"批准:"+request+" 数量:"+amount);
}else{
if(superior!=null){
superior.requestHandler(request, amount);
}
}
}
}public class GeneralManger extends Manager {
public GeneralManger(String name){
super(name);
}
public void setSuperior(Manager superior) {
super.setSuperior(superior);
}
@Override
public void requestHandler(String request, int amount) {
if("请假".equals(request)){
System.out.println(name+"批准:"+request);
}else if("加薪".equals(request)&&amount<=500){
System.out.println(name+"批准:"+request+" 金额:"+amount);
}else{
System.out.println(request+"的 事情以后再说吧!");
}
}
}
//测试
public class Test {
public static void main(String[] args) {
CommonManger zhangsan=new CommonManger("张三");
Major lisi=new Major("李四");
GeneralManger wangwu=new GeneralManger("王五");
zhangsan.setSuperior(lisi);
lisi.setSuperior(wangwu);
zhangsan.requestHandler("请假", 1);
zhangsan.requestHandler("请假", 4);
zhangsan.requestHandler("加薪", 500);
zhangsan.requestHandler("加薪", 1000);
}
}
//测试
public class Test {
public static void main(String[] args) {
CommonManger zhangsan=new CommonManger("张三");
Major lisi=new Major("李四");
GeneralManger wangwu=new GeneralManger("王五");
zhangsan.setSuperior(lisi);
lisi.setSuperior(wangwu);
zhangsan.requestHandler("请假", 1);
zhangsan.requestHandler("请假", 4);
zhangsan.requestHandler("加薪", 500);
zhangsan.requestHandler("加薪", 1000);
}
}
输出结果:
张三批准:请假 数量:1
李四批准:请假 数量:4
王五批准:加薪 金额:500
加薪的 事情以后再说吧!