李实名的现代生活 之责任链模式

    技术2022-05-19  23

    李实名的现代生活 之责任链模式

                                                                                           向谁汇报

    一、定义

    使多个对象都有就会机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系,将这些对象连接成一条链,并沿着这条链传递该请求,直到有对象处理他为止。

    二、优点

    可以将请求与处理分开,请求者不需要直到谁做最后的处理。

    三、缺点

    责任链过长时,性能较差。

    四、故事继续(向谁汇报)

    场景1:

    “小乔,BOSS在不在?”曹草如一阵风一样的冲到BOSS的办公室里。

    “不在,可能在家睡觉吧?”

            “不会吧”曹草一脸无奈:“我打电话他也不接!”

            “老板在休息时间是绝对不会开手机的,而且他很讨厌手机!”小乔笑道。

             “唉,只能等他了........”

    场景2:

             “小乔,BOSS在不在?”空明笑嘻嘻的走到小乔身边。

            “不在,可能在家睡觉吧?”

            “哦,那有麻烦了”空明抓了抓头:“看来我要等他了.....”

            “看来也只能这样了”小乔笑道。

             “唉,BOSS啊....”空明突然话题一转:“小乔,明晚有空吗?《加勒比海盗4》上映了,我们.....”

             “不了,我妈叫我早点回家陪她!”小乔赶紧说:“下次吧!”

             “.............”

     

             “BOSS也太懒了,总是不在,他们老来烦我,不行,我得找BOSS说道说道....”小乔心说。

    一天:BOSS办公室

             

                 “老板,最近您经常不在,曹经理和空总监,小黑和紫龙有很多事要找您。”小乔试探的说。

                 “哦?那结果呢?”李实名看起来心情不错。

    “还能怎么样,回去等您了...”

                 "那不就没事了!"李实名神经大条的说。

                “可是,可是不能总是这样啊,那万一事情紧急怎么办?”小乔不满的说。

                李实名哈哈大笑:“当然不行,我这几天在家,这个问题已经在梦里....哦不!在思考中解决了!你看我们这样做:”

     

                   先定义一个  处理者的抽象类

     

    package zerenlian; public abstract class ChuLi { protected abstract String getJiBie(); protected abstract ChuLi getNextChuLi(); protected abstract void setNextChuLi(ChuLi c); //对请求做出判断 public final void panDuan(QingQiu qingQiu) { if (this.getJiBie().equals(qingQiu.getJiBie())) { this.doIt(qingQiu.getNeiRong()); } else { //级别不对 //是否还有上级 if (this.getNextChuLi() != null) { this.getNextChuLi().panDuan(qingQiu); } else { //没有上级了 } } } //业务处理 protected abstract void doIt(String neiRong); }  

     

                            然后是具体的处理者

     

    处理者BOSS

    package zerenlian; public class BossChuLi extends ChuLi { private String jiBie = "1"; private ChuLi nextChuLi; @Override protected void doIt(String string) { System.out.println(string+"/n批准,给你100万!/n/t/t---李实名"); } @Override protected String getJiBie() { return this.jiBie; } @Override protected ChuLi getNextChuLi() { return this.nextChuLi; } @Override protected void setNextChuLi(ChuLi c) { this.nextChuLi = c; } }  

     

    处理者 1

     

    package zerenlian; public class ChuLi1 extends ChuLi { private String jiBie = "3"; private ChuLi nextChuLi; @Override protected void doIt(String string) { System.out.println(string+"/n批准,给你1万!/n/t/t---紫龙"); } @Override protected String getJiBie() { return this.jiBie; } @Override protected ChuLi getNextChuLi() { return this.nextChuLi; } @Override protected void setNextChuLi(ChuLi c) { this.nextChuLi = c; } }  

    处理者 2

     

     package zerenlian; public class ChuLi2 extends ChuLi { private String jiBie = "2"; private ChuLi nextChuLi; @Override protected void doIt(String string) { System.out.println(string+"/n批准,给你50万!/n/t/t---曹草"); } @Override protected String getJiBie() { return this.jiBie; } @Override protected ChuLi getNextChuLi() { return this.nextChuLi; } @Override protected void setNextChuLi(ChuLi c) { this.nextChuLi = c; } }  

     

    接着是请求类

     

    package zerenlian; public class QingQiu { //请求有内容和级别 private String neiRong; private String jiBie; public String getNeiRong() { return neiRong; } public void setNeiRong(String neiRong) { this.neiRong = neiRong; } public String getJiBie() { return jiBie; } public void setJiBie(String jiBie) { this.jiBie = jiBie; } public QingQiu(String neiRong, String jiBie) { super(); this.setJiBie(jiBie); this.setNeiRong(neiRong); } }  

                               最后是 场景

    package zerenlian; public class Client { public static void main(String[] args) { ChuLi1 chuLi1 = new ChuLi1(); ChuLi2 chuLi2 = new ChuLi2(); BossChuLi bossChuLi = new BossChuLi(); chuLi1.setNextChuLi(chuLi2); chuLi2.setNextChuLi(bossChuLi); //提出请求1 QingQiu qingQiu = new QingQiu("我想我们需要在上打广告!", "1"); chuLi1.panDuan(qingQiu); //提出请求2 QingQiu qingQiu2 = new QingQiu("我想我们需要给员工组织一场活动.....", "2"); chuLi1.panDuan(qingQiu2); //提出请求3 QingQiu qingQiu3 = new QingQiu("我昨天出去跑业务,受伤了,想工费报销", "3"); chuLi1.panDuan(qingQiu3); } }  

     

    结果:

    我想我们需要在上打广告!

    批准,给你100万!

    ---李实名

    我想我们需要给员工组织一场活动.....

    批准,给你50万!

    ---曹草

    我昨天出去跑业务,受伤了,想工费报销

    批准,给你1万!

    ---紫龙

      “这样怎么样?”李实名笑笑说道。                                 “您真是太有才了!”                                 “那是......”

    有了这套汇报机制,李实名又可以安心的睡觉了,但是他不知道,一场危机正在接近他.........

     

     

     

     

     

     

     


    最新回复(0)