JAVA设计模式(17)行为型-责任链模式

职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形成一条对象链。请求并不知道具体执行请求的对象是哪一个,这样就实现了请求与处理对象之间的解耦。

领导抽象类:Lingdao

//@author v: jbossjf

public abstract class Lingdao {
    private Lingdao nextLingdao;
    public Lingdao getNextLingdao() {
        return nextLingdao;
    }
    public void setNextLingdao(Lingdao nextLingdao) {
        this.nextLingdao = nextLingdao;
    }
    abstract void chuli(Files file);
}

领导实现类:Zongjingli、Fujingli、Bumenjingli

/**
 * 总经理
 */
public class Zongjingli extends Lingdao {
    private final String name = "总经理";
    private final int level = 0;//最大
    @Override
    public void chuli(Files file) {
        if(this.level > file.getLevel()){
            System.out.println(name + "未处理文件《" + file.getFileName() + "》");
            getNextLingdao().chuli(file);
        }else{
            System.out.println(name + "处理了文件《" + file.getFileName() + "》");
        }
    }
}

/**
 * 副经理
 */
public class Fujingli extends Lingdao {
    private final String name = "副经理";
    private final int level = 1;
    @Override
    public void chuli(Files file) {
        if(this.level > file.getLevel()){
            System.out.println(name + "未处理文件《" + file.getFileName() + "》");
            getNextLingdao().chuli(file);
        }else{
            System.out.println(name + "处理了文件《" + file.getFileName() + "》");
        }
    }
}

/**
 * 部门经理
 */
public class Bumenjingli extends Lingdao{
    private final String name = "部门经理";
    private final int level = 2;
    @Override
    public void chuli(Files file) {
        if(this.level > file.getLevel()){
            System.out.println(name + "未处理文件《" + file.getFileName() + "》");
            getNextLingdao().chuli(file);
        }else{
            System.out.println(name + "处理了文件《" + file.getFileName() + "》");
        }
    }
}

文件类:Files

public class Files {
    private String fileName;
    private int level;
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public int getLevel() {
        return level;
    }
    public void setLevel(int level) {
        this.level = level;
    }
}

测试类:Clienter

public class Clienter {
    public static void main(String[] args) {
        //定义职责链
        Lingdao zongjingli = new Zongjingli();
        Lingdao fujingli = new Fujingli();
        Lingdao bumenjingli = new Bumenjingli();
        bumenjingli.setNextLingdao(fujingli);
        fujingli.setNextLingdao(zongjingli);
        //定义两份文件
        Files f1 = new Files();
        f1.setFileName("正确对待旱鸭子");
        f1.setLevel(1);
        Files f2 = new Files();
        f2.setFileName("年会在那里举行");
        f2.setLevel(0);
        //提交文件
        bumenjingli.chuli(f1);
        bumenjingli.chuli(f2);
    }
}

结果:

部门经理未处理文件《正确对待旱鸭子》
副经理处理了文件《正确对待旱鸭子》
部门经理未处理文件《年会在那里举行》
副经理未处理文件《年会在那里举行》
总经理处理了文件《年会在那里举行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值