• 设计模式_责任链


    责任链模式

    介绍

    设计模式定义案例
    责任链模式问题 传给 多个可处理人
    这多个处理人做成一个链表
    学生请假条审核
    上课老师(3天权限)
    班主任  (5天权限)
    校长    (30天权限)

    问题堆积在哪里解决办法进一步优化
    学生需要找多个老师批准
    太麻烦 
    学生只找当前上课老师
    (可以批假人做出一个成链表)
    如果当前上课老师不能批准找上级

    流程:
    学生-找->上课老师->班主任->校长
    设计需要有前瞻性
    流程灵活DIY
    1 老师基类添加设置上级单位,灵活配置上级
    2 老师单位做成工厂模式

    类图

    AbstractTeacher: 抽象类

    CurrentTeacher: 上课老师

    ClassTeacher: 班主任

    Headmaster: 校长

    StudentContext:请假条

    代码

    AbstractTeacher

    1. public abstract class AbstractTeacher
    2. {
    3. // 灵活可变审核顺序
    4. protected AbstractTeacher next;
    5. // 设置上级
    6. public void SetNextAuditPeople(AbstractTeacher next)
    7. {
    8. this.next = next;
    9. }
    10. // 审核
    11. public abstract void Audit(StudentContext context);
    12. }

    CurrentTeacher

    1. using UnityEngine;
    2. public class CurrentTeacher : AbstractTeacher
    3. {
    4. // 时间
    5. int maxDate = 3;
    6. // 姓名
    7. string name = "当前上课老师";
    8. public override void Audit(StudentContext context)
    9. {
    10. // 是否通过
    11. if (context.GetDate() <= maxDate)
    12. {
    13. context.isOK = true;
    14. Debug.Log(name + ":批准.");
    15. }
    16. else
    17. {
    18. Debug.Log(name + ":无权限.");
    19. }
    20. // 没有通过:传给上级
    21. if (context.isOK != true)
    22. {
    23. if (null != next)
    24. next.Audit(context);
    25. else
    26. Debug.Log("没有上级联系人!");
    27. }
    28. }
    29. }

    ClassTeacher 

    1. using UnityEngine;
    2. public class ClassTeacher : AbstractTeacher
    3. {
    4. // 时间
    5. int maxDate = 14;
    6. // 姓名
    7. string name = "班主任";
    8. public override void Audit(StudentContext context)
    9. {
    10. // 是否通过
    11. if (context.GetDate() <= maxDate)
    12. {
    13. context.isOK = true;
    14. Debug.Log(name + ":批准.");
    15. }
    16. else
    17. {
    18. Debug.Log(name + ":无权限.");
    19. }
    20. // 没有通过:传给上级
    21. if (context.isOK != true)
    22. {
    23. if (null != next)
    24. next.Audit(context);
    25. else
    26. Debug.Log("没有上级联系人!");
    27. }
    28. }
    29. }

    Headmaster 

    1. using UnityEngine;
    2. public class Headmaster : AbstractTeacher
    3. {
    4. // 时间
    5. int maxDate = 30;
    6. // 姓名
    7. string name = "校长";
    8. public override void Audit(StudentContext context)
    9. {
    10. // 是否通过
    11. if (context.GetDate() <= maxDate)
    12. {
    13. context.isOK = true;
    14. Debug.Log(name + ":批准.");
    15. }
    16. else
    17. {
    18. Debug.Log(name + ":无权限.");
    19. }
    20. // 没有通过:传给上级
    21. if (context.isOK != true)
    22. {
    23. if (null != next)
    24. next.Audit(context);
    25. else
    26. Debug.Log("没有上级联系人!");
    27. }
    28. }
    29. }

    StudentContext // 假条

    1. using UnityEngine;
    2. public class StudentContext
    3. {
    4. public bool isOK = false;
    5. string name = "学生A";
    6. int date = 0;
    7. private StudentContext(){}
    8. public StudentContext(string name, int date)
    9. {
    10. this.name = name;
    11. this.date = date;
    12. }
    13. public int GetDate()
    14. {
    15. return date;
    16. }
    17. }

    测试代码

    1. // 运行
    2. void Start()
    3. {
    4. // 请假条
    5. StudentContext sc = new StudentContext("小强", 29);
    6. // 老师
    7. AbstractTeacher teacher1 = new CurrentTeacher();
    8. AbstractTeacher teacher2 = new ClassTeacher();
    9. AbstractTeacher teacher3 = new Headmaster();
    10. // 设计上级
    11. {
    12. teacher1.SetNextAuditPeople(teacher2);
    13. teacher2.SetNextAuditPeople(teacher3);
    14. }
    15. // 请假
    16. teacher1.Audit(sc);
    17. }
    运行结果:

  • 相关阅读:
    【软考软件评测师】第二十六章 计算机安全设计(其他知识)
    音视频开发常见问题(四):视频花屏和绿屏
    【Redis】第1讲 互联网架构的演变历程
    仿制 Google Chrome 的恐龙小游戏
    .NET 使用 OpenTelemetry metrics 监控应用程序指标
    Docker容器与DockerFile开发详解
    【HTML-CSS】总结-6种实现元素 上下左右居中 方法--附演示效果
    el-table 默认数据选中优化版本
    Java的jstack命令使用详解
    error while loading shared libraries: libc.so.6 误删除libc.so.6急救办法,
  • 原文地址:https://blog.csdn.net/qq_30926011/article/details/133762551