筹划模式之责任链模式

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

1.责任链概念

        答应哀求沿着处理者链传递,直到链上的某个处理者决定处理此哀求。通过这种方式,哀求的发送者无须知道是哪一个接收者处理其哀求,这使得体系可以动态地重新组织和分配责任。
2.责任链构成

        抽象处理者(Handler): 界说一个处理哀求的接口,并持有下一个处理者的引用。
        详细处理者(Concrete Handlers): 实现抽象处理者的接口,在处理哀求前判断自己是否能够处理该哀求,如果可以则举行处理,否则将哀求传递给下一个处理者。
        客户端(Client): 创建处理者链并将哀求发送到链的第一个节点。
3.举个栗子:

以学生请假为例
7天        正常流程:老师(小于2天)==>领导(7天以下)===>校长(所有都行)    效果==》导员批
7天        非正常流程(导员有事): 老师(小于2天)===>校长(所有都行)              效果==》校长批
15天       正常流程:老师(小于2天)==>领导(7天以下)===>校长(所有都行)   效果==》校长批

4.代码实现

1)抽象处理者

  1. package org.xiji.ChainOfResponsibility;
  2. /**
  3. * 抽象处理者
  4. */
  5. public abstract class Handler {
  6.     /**
  7.      * 下一个处理者
  8.      */
  9.     protected Handler nextHandler;
  10.     public Handler setNextHandler(Handler nextHandler) {
  11.         this.nextHandler = nextHandler;
  12.         return this.nextHandler;
  13.     }
  14.     /**
  15.      * 定义处理方法
  16.      */
  17.     public abstract void handle(int day);
  18. }
复制代码
2)详细处理者

老师

  1. package org.xiji.ChainOfResponsibility;
  2. /**
  3. * 老师
  4. */
  5. public class Teacher extends Handler{
  6.     @Override
  7.     public void handle(int day) {
  8.         if (day <= 2) {
  9.             System.out.println("老师批注请假"+day+"天");
  10.         }else {
  11.             nextHandler.handle(day);
  12.         }
  13.     }
  14. }
复制代码
导员

  1. package org.xiji.ChainOfResponsibility;
  2. /**
  3. * 导员
  4. */
  5. public class Instructor extends Handler{
  6.     @Override
  7.     public void handle(int day) {
  8.         if (day <= 7) {
  9.             System.out.println("导员批注请假"+day+"天");
  10.         } else {
  11.             nextHandler.handle(day);
  12.         }
  13.     }
  14. }
复制代码
校长

  1. package org.xiji.ChainOfResponsibility;
  2. /**
  3. * 校长
  4. */
  5. public class Principal extends Handler{
  6.     @Override
  7.     public void handle(int day) {
  8.         System.out.println("校长批注请假"+day+"天");
  9.     }
  10. }
复制代码
3)客户端类

  1. package org.xiji.ChainOfResponsibility;
  2. /**
  3. * 处理器测试类
  4. */
  5. public class ChainOfResponsibilityMain {
  6.     public static void main(String[] args) {
  7.         //老师角色
  8.         Teacher teacher = new Teacher();
  9.         //导员角色
  10.         Instructor instructor = new Instructor();
  11.         //校长角色
  12.         Principal principal = new Principal();
  13.         System.out.println("===========================");
  14.         /**
  15.          * 请假关系   老师==>导员===>校长
  16.          */
  17.         System.out.println("正常流程请7天假");
  18.         teacher.setNextHandler(instructor);
  19.         instructor.setNextHandler(principal);
  20.         //例如找老师请假七天
  21.         int day = 7;
  22.         teacher.handle(day);
  23.         System.out.println("===========================");
  24.         System.out.println("非正常流程请7天假");
  25.         //找老师请假七天,导员不在,老师让你找校长
  26.         /**
  27.          * 请假关系 老师===>校长
  28.          */
  29.         teacher.setNextHandler(principal);
  30.         teacher.handle(day);
  31.         System.out.println("===========================");
  32.         System.out.println("正常流程请15天假");
  33.         //想请15天假
  34.         int day2 = 15;
  35.         //正常流程 找老师请假===>导员===>校长
  36.         teacher.setNextHandler(instructor);
  37.         instructor.setNextHandler(principal);
  38.         teacher.handle(day2);
  39.     }
  40. }
复制代码


5.运行效果



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表