职责链模式(Chain of Responsibility)

简介:

//注意职责链模式和状态模式的区别。

状态模式的逻辑顺序不一定是线性的。(每个状态中只需判断即可)

职责链模式的逻辑顺序是线性的。(每个Handler要设置Prior)

复制代码
  1 /*
  2  * 高校学生请假需要符合学校规定,假如班主任可以批准1天假,系主任可以批
  3  * 准7天假,各学院院长可以批准30天,学校校长可以批准1年。应用职责链模
  4  * 式,用C#控制台应用程序实现该设计。
  5  */
  6 using System;
  7 using System.Collections.Generic;
  8 using System.Linq;
  9 using System.Text;
 10 
 11 namespace ChainOfResponsibility
 12 {
 13     abstract class Teacher
 14     {
 15         protected string name;
 16         protected Teacher prior;
 17         public Teacher(string name)
 18         {
 19             this.name = name;
 20         }
 21         public void SetPrior(Teacher prior)
 22         {
 23             this.prior = prior;
 24         }
 25         public abstract void Handle(int request);
 26     }
 27     class BanZhuRen : Teacher
 28     {
 29         public BanZhuRen(string name)
 30             : base(name)
 31         { }
 32         public override void Handle(int request)
 33         {
 34             if (request == 1)
 35             {
 36                 Console.WriteLine("{0}:学生请假" + request + "天被批准了!", name);
 37             }
 38             else
 39             {
 40                 prior.Handle(request);
 41             }
 42         }
 43     }
 44     class XiZhuRen : Teacher
 45     {
 46         public XiZhuRen(string name)
 47             : base(name)
 48         { }
 49         public override void Handle(int request)
 50         {
 51             if (request <= 7)
 52             {
 53                 Console.WriteLine("{0}:学生请假" + request + "天被批准了!", name);
 54             }
 55             else
 56             {
 57                 prior.Handle(request);
 58             }
 59         }
 60     }
 61     class YuanZhang : Teacher
 62     {
 63         public YuanZhang(string name)
 64             : base(name)
 65         { }
 66         public override void Handle(int request)
 67         {
 68             if (request <= 30)
 69             {
 70                 Console.WriteLine("{0}:学生请假" + request + "天被批准了!", name);
 71             }
 72             else
 73             {
 74                 prior.Handle(request);
 75             }
 76         }
 77     }
 78     class XiaoZhang : Teacher
 79     {
 80         public XiaoZhang(string name)
 81             : base(name)
 82         { }
 83         public override void Handle(int request)
 84         {
 85             if (request <= 365)
 86             {
 87                 Console.WriteLine("{0}:学生请假" + request + "天被批准了!", name);
 88             }
 89             else
 90             {
 91                 Console.WriteLine("{0}:请假这么多天,干脆休学一年算了!", name);
 92             }
 93         }
 94     }
 95     class Program
 96     {
 97         static void Main(string[] args)
 98         {
 99             BanZhuRen bzr = new BanZhuRen("班竹韧");
100             XiZhuRen xzr = new XiZhuRen("西祝任");
101             YuanZhang yz = new YuanZhang("袁章");
102             XiaoZhang xz = new XiaoZhang("肖长");
103 
104             bzr.SetPrior(xzr);
105             xzr.SetPrior(yz);
106             yz.SetPrior(xz);
107 
108             string off_days;
109             for (int i = 0; i < 5; i++)
110             {
111                 Console.WriteLine("输入请假天数:");
112                 off_days = Console.ReadLine();
113                 bzr.Handle(Convert.ToInt16(off_days));
114             }
115         }
116     }
117 }
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/17/2506029.html,如需转载请自行联系原作者

相关文章
|
10天前
|
设计模式 C# C++
责任链模式(Chain of Responsibility Pattern)
责任链模式是一种行为型设计模式,允许多个对象按顺序处理请求,直到某个对象处理为止。适用于多个对象可能处理同一请求的场景,如请假审批流程。优点是灵活性高、降低耦合,但责任链过长可能影响性能。
24 3
|
7月前
|
设计模式 安全 Java
设计模式之责任链 Chain Of Responsibility
设计模式之责任链 Chain Of Responsibility
47 1
|
设计模式 JavaScript Java
设计模式17 - 责任链模式【Chain of Responsibility Pattern】
设计模式17 - 责任链模式【Chain of Responsibility Pattern】
47 0
|
设计模式 JavaScript Java
设计模式~责任链模式(Chain of Responsibility)-12
目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)经典案例 代码
60 0
|
API
说说Chain of Responsibility模式理解
说说Chain of Responsibility模式理解
81 0
行为型模式 - 责任链模式(Chain of Responsibility Pattern)
行为型模式 - 责任链模式(Chain of Responsibility Pattern)
|
存储 设计模式 Dubbo
行为型-Chain Of Responsibility
职责链模式的原理和实现 职责链模式的英文翻译是 Chain Of Responsibility Design Pattern。在 GoF 的《设计模式》中,它是这么定义的: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
132 0
行为型-Chain Of Responsibility
|
Java 设计模式
设计模式——17、责任链模式(Chain of Responsibility)
17、责任链模式(Chain of Responsibility)
1849 0