23种设计模式之责任链模式(Chain of Responsibility)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了23种设计模式之责任链模式(Chain of Responsibility),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3165字,纯文字阅读大概需要5分钟。
内容图文
责任链模式是一种对象的行为型模式,避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。责任链模式不保证每个请求都被接受,由于一个请求没有明确的接收者,那么就不能保证它一定会被处理。
优点:
1)降低了耦合度。
2)增加向对象指定责任的灵活性。
3)由于在一个类中产生的事件可以被发送到组成中的其它类处理器上,类的集合可以作为一个整体。
使用场景:
1)多个对象可以处理一个请求,而其处理器却是未知的。
2)想要在不指定确切的请求接收对象的情况下,向几个对象中的一个发送请求。
3)可以动态地指定能够处理请求的对象集。
Chain of Responsibility 模式
/// <summary> /// 采购需求实体类 /// </summary> public class PurchaseRequest { public double amount;//一个采购的金额 publicint number;//采购单编号 publicstring purpose;//采购目的 }
/// <summary> /// 审批类 /// </summary> public class Approver { public Approver() { successor = null;//初始化为null } ///<summary>/// 处理审批 ///</summary>///<param name="aRequest">审批请求</param>publicvoid ProcessRequest(PurchaseRequest aRequest) { if (successor != null) { successor.ProcessRequest(aRequest); } } ///<summary>/// 设置审批对象 ///</summary>///<param name="aSuccessor">具体审批对象</param>publicvoid SetSuccessor(Approver aSuccessor) { successor = aSuccessor; } private Approver successor;//实例化审批对象 }
/// <summary> /// 会议讨论类 /// </summary> public class Congress : Approver { public void ProcessRequest(PurchaseRequest aRequest) { if (aRequest.amount >= 500000) { Console.WriteLine("正在创建:会议讨论对象..."); Console.WriteLine(">=500000的由开会讨论决定"); } else { base.ProcessRequest(aRequest); } } }
/// <summary> /// 董事长类 /// </summary> public class President : Approver { public new void ProcessRequest(PurchaseRequest aRequest) { if (aRequest.amount >= 100000 && aRequest.amount < 500000) { Console.WriteLine("正在创建:董事长对象..."); Console.WriteLine("金额为:" + aRequest.amount + "的由董事长决定"); } else { Console.WriteLine("董事长无权审批该采购项目,向上由会议讨论决定"); new Congress().ProcessRequest(aRequest); } } }
/// <summary> /// 副董事长类 /// </summary> public class VicePresident : Approver { public new void ProcessRequest(PurchaseRequest aRequest) { if (aRequest.amount >= 50000 && aRequest.amount < 100000) { Console.WriteLine("正在创建:副董事长对象..."); Console.WriteLine("金额为:" + aRequest.amount + "的由副董事长决定"); } else { Console.WriteLine("副董事长无权审批该采购项目,向上给董事长审批"); new President().ProcessRequest(aRequest); } } }
/// <summary> /// 主任类 /// </summary> public class Director : Approver { public new void ProcessRequest(PurchaseRequest aRequest) { if (aRequest.amount < 50000) { Console.WriteLine("正在创建:主任对象..."); Console.WriteLine("金额为:" + aRequest.amount + "的由主任决定"); } else { Console.WriteLine("主任无权审批该采购项目,向上给副董事长审批"); new VicePresident().ProcessRequest(aRequest); } } }
class Program { static void Main(string[] args) { //责任链设计模式 Congress Meeting = new Congress(); President Tammy = new President(); VicePresident Sam = new VicePresident(); Director Larry = new Director(); //构造责任链 Meeting.SetSuccessor(null); Tammy.SetSuccessor(Meeting); Sam.SetSuccessor(Tammy); Larry.SetSuccessor(Sam); while (1 == 1) { Console.WriteLine("/r/n请输入采购项目的金额:"); PurchaseRequest aRequest = new PurchaseRequest(); aRequest.amount = Convert.ToDouble(Console.ReadLine()); Larry.ProcessRequest(aRequest); } } }
原文:http://www.cnblogs.com/guwei4037/p/6689406.html
内容总结
以上是互联网集市为您收集整理的23种设计模式之责任链模式(Chain of Responsibility)全部内容,希望文章能够帮你解决23种设计模式之责任链模式(Chain of Responsibility)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。