中资源的 域名管理网站,网站建设设计细节,qq空间是哪个公司开发的,手机传奇网站模板下载重要概念 1. 使多个对象都有机会处理请求#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链#xff0c;并沿着这条链传递该请求#xff0c;直到有一个对象处理它为止。 2.请求是沿着链条传递到有一个处理点对象负责处理这个请求为止。请求者无需…重要概念 1. 使多个对象都有机会处理请求从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链并沿着这条链传递该请求直到有一个对象处理它为止。 2.请求是沿着链条传递到有一个处理点对象负责处理这个请求为止。请求者无需关心谁会处理这个请求。 3. 接收者和发送者都没有对方的明确信息且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接他们仅需保持一个指向其后继者的引用而不需要保持它所有的候选接收者的引用。 4. 从执行流程上感觉和 case break 相似。 5. 随时地增加或修改该处理一个请求的结构处理顺序处理点数量增强了给对象指派职责的灵活性。 6. 解决大量分支判断造成的难维护灵活性差的问题。 示例程序 using System;
using System.Collections.Generic;
using System.Text;namespace 职责链模式
{class Program{static void Main(string[] args){//初始化三个职责链处理点Handler h1 new ConcreteHandler1();Handler h2 new ConcreteHandler2();Handler h3 new ConcreteHandler3();//设置职责链的连接处理顺序h1.SetSuccessor(h2);h2.SetSuccessor(h3);int[] requests { 2, 5, 14, 22, 18, 3, 27, 20 };foreach (int request in requests){//要从职责链的最小端也就是开始的那头发出请求。h1.HandleRequest(request);}Console.Read();}}abstract class Handler{protected Handler successor;public void SetSuccessor(Handler successor){this.successor successor;}public abstract void HandleRequest(int request);}class ConcreteHandler1 : Handler{public override void HandleRequest(int request){if (request 0 request 10){Console.WriteLine({0} 处理请求 {1},this.GetType().Name, request);}else if (successor ! null){successor.HandleRequest(request);}}}class ConcreteHandler2 : Handler{public override void HandleRequest(int request){if (request 10 request 20){Console.WriteLine({0} 处理请求 {1},this.GetType().Name, request);}else if (successor ! null){successor.HandleRequest(request);}}}class ConcreteHandler3 : Handler{public override void HandleRequest(int request){if (request 20 request 30){Console.WriteLine({0} 处理请求 {1},this.GetType().Name, request);}else if (successor ! null){successor.HandleRequest(request);}}}} 加薪代码2 using System;
using System.Collections.Generic;
using System.Text;namespace 职责链模式
{class Program{static void Main(string[] args){CommonManager jinli new CommonManager(金利);Majordomo zongjian new Majordomo(宗剑);GeneralManager zhongjingli new GeneralManager(钟精励);jinli.SetSuperior(zongjian);zongjian.SetSuperior(zhongjingli);Request request new Request();request.RequestType 请假;request.RequestContent 小菜请假;request.Number 1;jinli.RequestApplications(request);Request request2 new Request();request2.RequestType 请假;request2.RequestContent 小菜请假;request2.Number 4;jinli.RequestApplications(request2);Request request3 new Request();request3.RequestType 加薪;request3.RequestContent 小菜请求加薪;request3.Number 500;jinli.RequestApplications(request3);Request request4 new Request();request4.RequestType 加薪;request4.RequestContent 小菜请求加薪;request4.Number 1000;jinli.RequestApplications(request4);Console.Read();}}//管理者abstract class Manager{protected string name;//管理者的上级protected Manager superior;public Manager(string name){this.name name;}//设置管理者的上级public void SetSuperior(Manager superior){this.superior superior;}//申请请求abstract public void RequestApplications(Request request);}//经理class CommonManager : Manager{public CommonManager(string name): base(name){ }public override void RequestApplications(Request request){if (request.RequestType 请假 request.Number 2){Console.WriteLine({0}:{1} 数量{2} 被批准, name, request.RequestContent, request.Number);}else{if (superior ! null)superior.RequestApplications(request);}}}//总监class Majordomo : Manager{public Majordomo(string name): base(name){ }public override void RequestApplications(Request request){if (request.RequestType 请假 request.Number 5){Console.WriteLine({0}:{1} 数量{2} 被批准, name, request.RequestContent, request.Number);}else{if (superior ! null)superior.RequestApplications(request);}}}//总经理class GeneralManager : Manager{public GeneralManager(string name): base(name){ }public override void RequestApplications(Request request){if (request.RequestType 请假){Console.WriteLine({0}:{1} 数量{2} 被批准, name, request.RequestContent, request.Number);}else if (request.RequestType 加薪 request.Number 500){Console.WriteLine({0}:{1} 数量{2} 被批准, name, request.RequestContent, request.Number);}else if (request.RequestType 加薪 request.Number 500){Console.WriteLine({0}:{1} 数量{2} 再说吧, name, request.RequestContent, request.Number);}}}//申请class Request{//申请类别private string requestType;public string RequestType{get { return requestType; }set { requestType value; }}//申请内容private string requestContent;public string RequestContent{get { return requestContent; }set { requestContent value; }}//数量private int number;public int Number{get { return number; }set { number value; }}}} 转载于:https://www.cnblogs.com/finehappy/archive/2009/12/13/1623038.html