打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
设计模式笔记之十三 (责任链模式)

责任链模式

责任链模式就是让多个对象按职责层次依次处理请求,使多个对象都有机会按照职责处理请求。

想进我们实验室也不件容易的事情,需要经过层层面试,最后由老总拍板确认是否录用。以前这套做法工作的很好,因为大家都这么做,但是实验室最近扩张了不少,人事处在大肆招人,老总就忙不过来了。

顾问林阿标就提出了一个改进方案,让人事处员工面试第一轮,并且人事处员工能够决定是否录用薪资在3000以下的面试者;人事经理面试第二轮,并且能够决定是否录用薪资在6000以下的面试者;老总面试第三轮,并且决定是否录用薪资在6000以上的面试者:

import java.util.ArrayList;class Interviewee {    public int salary;    public String role;    public String gender;    public String name;    public Interviewee(String name, String role, String gender, int salary) {        this.name = name;        this.role = role;        this.gender = gender;        this.salary = salary;    }}abstract class Interviewer {    Interviewer next;    abstract public void interview(Interviewee interviewee);    public void setNext(Interviewer interviewer) {        next = interviewer;    }    public void moveToNext(Interviewee interviewee) {        if (next != null) {            next.interview(interviewee);        }    }}class RenShiYuanGong extends Interviewer {    @Override    public void interview(Interviewee interviewee) {        if (interviewee.role == "秘书") { //虽然没说,但是秘书肯定是要老总点头才行的            if (interviewee.gender == "男") { //老总不好这口                System.out.println("人事员工说:" + interviewee.name + "不好意思,我们不找男秘书");            } else {                moveToNext(interviewee);            }        } else {            if (interviewee.salary <= 3000) {                if (interviewee.gender == "女") {//只要是女的就招,反正养眼也好                    System.out.println("人事员工说:" + interviewee.name + "你很适合这个岗位,欢迎加入我们");                } else {                    if (interviewee.role == "下水道工人") { //男的只能干体力活的,难道招个高富帅来抢美女资源么                        System.out.println("人事员工说:" + interviewee.name + "你很适合这个岗位,欢迎加入我们");                    } else {                        System.out.println("人事员工说:" + interviewee.name + "回去吧,我们基本不提供岗位给男性");                    }                }            } else {                moveToNext(interviewee);            }        }            }    }class RenShiJingLi extends Interviewer {    @Override    public void interview(Interviewee interviewee) {        if (interviewee.role == "秘书") { //虽然没说,但是秘书肯定是要老总点头才行的            if (interviewee.gender == "男") { //老总不好这口                System.out.println("人事经理说:" + interviewee.name + "不好意思,我们不找男秘书");            } else {                moveToNext(interviewee);            }        } else {            if (interviewee.salary <= 6000) {                if (interviewee.gender == "女") {//只要是女的就招,反正养眼也好                    System.out.println("人事经理说:" + interviewee.name + "你很适合这个岗位,欢迎加入我们");                } else {                    if (interviewee.role == "下水道工人") { //男的只能干体力活的,难道招个高富帅来抢美女资源么                        System.out.println("人事经理说:" + interviewee.name + "你很适合这个岗位,欢迎加入我们");                    } else {                        System.out.println("人事经理说:" + interviewee.name + "回去吧,我们基本不提供岗位给男性");                    }                }            } else {                moveToNext(interviewee);            }        }            }    }class LaoZong extends Interviewer {    @Override    public void interview(Interviewee interviewee) {        if (interviewee.role == "秘书") {            System.out.println("老总说:" + interviewee.name + "不好意思,你不是我的菜");        } else {                if (interviewee.gender == "女") {//只要是女的就招,反正养眼也好                    System.out.println("老总说:" + interviewee.name + "你很适合这个岗位,欢迎加入我们");                } else {                    if (interviewee.role == "下水道工人") { //男的只能干体力活的,难道招个高富帅来抢美女资源么                        System.out.println("老总说:" + interviewee.name + "你很适合这个岗位,欢迎加入我们");                    } else {                        System.out.println("老总说:" + interviewee.name + "回去吧,我们基本不提供岗位给男性");                    }                }        }            }    }public class ChainOfResponsibility {    public static void main(String[] args) {        //设置责任链, 从人事员工 到 人事经理 到 老总        Interviewer laozong = new LaoZong();        Interviewer renshiyuangong = new RenShiYuanGong();        Interviewer renshijingli = new RenShiJingLi();        renshiyuangong.setNext(renshijingli);        renshijingli.setNext(laozong);                ArrayList<Interviewee> interviewees = new ArrayList<Interviewee>();        interviewees.add(new Interviewee("张三", "厂长", "男", 9000));        interviewees.add(new Interviewee("李四", "下水道工人", "男", 2000));        interviewees.add(new Interviewee("王五", "部长", "男", 7000));        interviewees.add(new Interviewee("赵六", "顾问", "女", 5000));        interviewees.add(new Interviewee("马七", "干事", "男", 6000));        interviewees.add(new Interviewee("小则元", "干事", "女", 6000));        interviewees.add(new Interviewee("高树玛丽呀", "秘书", "女", 29999));        interviewees.add(new Interviewee("加藤音", "秘书", "男", 2999));                for (Interviewee interviewee:interviewees) {            renshiyuangong.interview(interviewee);        }    }}

以上就是一个责任链模式的例子。由各个单元组成一个链式结构,单一个单元响应不了请求的时候,就将这个请求传递给链式结构的下一个节点,而且这个节点也只能传递给下一个节点,因为他只持有下一个节点的引用。

这个链式结构和链表的存储方式差不多,每一个节点除了自身的信息外还存储者下一节点的引用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
if语句块中有return的情况
What is love
成绩等级判断
Day2第五个知识点
二级英语背诵4. How to Succeed in a Job Interview
SpringBoot中这5种高大上的yml文件读取方式,你知道吗?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服