c#设计模式之责任链模式
来源:互联网 发布:淘宝客服交流技巧 编辑:程序博客网 时间:2024/05/17 22:59
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任.
using System;class Purchase{ private int number; private double amount; private string purpose; public Purchase(int number, double amount, string purpose) { this.number = number; this.amount = amount; this.purpose = purpose; } public double Amount { get { return amount; } set { amount = value; } } public string Purpose { get { return purpose; } set { purpose = value; } } public int Number { get { return number; } set { number = value; } }}abstract class Approver{ protected Approver successor; public void SetSuccessor(Approver successor) { this.successor = successor; } public abstract void ProcessRequest(Purchase purchase);}class Director : Approver{ public override void ProcessRequest(Purchase purchase) { if (purchase.Amount < 10000.0) { Console.WriteLine("{0} approved request# {1}", this.GetType().Name, purchase.Number); } else if (null != successor) { successor.ProcessRequest(purchase); } }}class VicePresident : Approver{ public override void ProcessRequest(Purchase purchase) { if (purchase.Amount < 25000.0) { Console.WriteLine("{0} approved request# {1}", this.GetType().Name, purchase.Number); } else if (successor != null) { successor.ProcessRequest(purchase); } }}class President : Approver{ public override void ProcessRequest(Purchase purchase) { if (purchase.Amount < 100000.0) { Console.WriteLine("{0} approved request# {1}", this.GetType().Name, purchase.Number); } else { Console.WriteLine("Request! {0} requires an executive meeting!", purchase.Number); } }}class Program{ static void Main(string[] args) { Director Larry = new Director(); VicePresident Sam = new VicePresident(); President Tammy = new President(); Larry.SetSuccessor(Sam); Sam.SetSuccessor(Tammy); Purchase p = new Purchase(1024, 350.00, "Supplies"); Larry.ProcessRequest(p); p = new Purchase(2035,32590.10,"Project X"); Larry.ProcessRequest(p); p = new Purchase(2036, 122100.00, "Project Y"); Larry.ProcessRequest(p); Console.ReadKey(); }}
阅读全文
0 0
- C#设计模式之责任链模式
- c#设计模式之责任链模式
- C# 设计模式 责任链
- 【C#设计模式-责任链模式】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- 设计模式之--责任链模式
- vim编辑器
- 罗斯柴尔德
- Election Time
- SvcUtil.exe 生成的代理类与别人生成的不同原因
- 关闭SELinux
- c#设计模式之责任链模式
- BZOJ 1060 时态同步
- 原码 补码 反码
- 切片
- 文本溢出的处理
- 转:系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- 剑指offer--二叉搜索树的后序遍历序列
- Candence/Allegro启动找不到cdn_sfl401as.dll文件解决方法
- swift学习 -> 计算型属性(rendonly)、didSet、懒加载(lazy)