设计模式学习笔记--职责链模式

 1 using System;
 2
 3 namespace ChainOfResponsibility
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/1 6:54:00
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// Handler说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public abstract class Handler
12     {
13         protected Handler successor;
14
15         public void SetSuccessor(Handler successor)
16         {
17             this.successor = successor;
18         }
19
20         public abstract void HandleRequest(int request);
21     }
22 }

 1 using System;
 2
 3 namespace ChainOfResponsibility
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/1 6:56:18
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// ConcreteHandler1说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class ConcreteHandler1:Handler
12     {
13         public override void HandleRequest(int request)
14         {
15             if (request >= 0 && request < 10)
16             {
17                 Console.WriteLine("{0}处理请求{1}",this.GetType().Name,request);
18             }
19             else if(successor != null)
20             {
21                 successor.HandleRequest(request);
22             }
23         }
24     }
25 }

 1 using System;
 2
 3 namespace ChainOfResponsibility
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/1 6:59:24
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// ConcreteHandler2说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class ConcreteHandler2:Handler
12     {
13         public override void HandleRequest(int request)
14         {
15             if (request >= 10 && request < 20)
16             {
17                 Console.WriteLine("{0}处理请求{1}", this.GetType().Name, request);
18             }
19             else if (successor != null)
20             {
21                 successor.HandleRequest(request);
22             }
23         }
24     }
25 }

 1 using System;
 2
 3 namespace ChainOfResponsibility
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/1 7:00:21
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// ConcreteHandler3说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class ConcreteHandler3:Handler
12     {
13         public override void HandleRequest(int request)
14         {
15             if (request >= 20 && request < 30)
16             {
17                 Console.WriteLine("{0}处理请求{1}", this.GetType().Name, request);
18             }
19             else if (successor != null)
20             {
21                 successor.HandleRequest(request);
22             }
23         }
24     }
25 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ChainOfResponsibility
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Handler h1 = new ConcreteHandler1();
14             Handler h2 = new ConcreteHandler2();
15             Handler h3 = new ConcreteHandler3();
16             h1.SetSuccessor(h2);
17             h2.SetSuccessor(h3);
18
19             int[] requests = { 2,5,14,22,18,3,27,20};
20
21             foreach (int request in requests)
22             {
23                 h1.HandleRequest(request);
24             }
25         }
26     }
27 }

时间: 2024-08-08 11:21:42

设计模式学习笔记--职责链模式的相关文章

设计模式学习之职责链模式

1.定义: 职责连模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象练成一条链,并沿着链传递该请求,直到由一个对象处理它为止. 2.UML ConcreteHandler1.ConcreteHandler2 :具体处理者类,处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理之,否则就将该请求转发给他的后继者. 3.职责链的好处 关键在与当客户提交一个请求时,请求是沿着链传递直至由一个Concrea

设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就推卸给另外个一个部门(对象).至于究竟谁来解决问题呢?政府部门就是为了能够避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,而且沿着这条链传递请求.直到有(部门)对象处理它为止. 样例1:js的事件浮升机制 样例2: 2.问题 假设有多个对象都有

大话设计模式笔记 职责链模式 中介者模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 优点:当客户提交一个请求是,请求是沿链传递直至有一个ConcreteHandler对象负责处理它. 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构.结果是职责链可以简化对象的相互连接. 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对

设计模式学习笔记--备忘录(Mamento)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)

1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,并且沿着这条链传递请求,直到有(部门)对象处理它为止. 例子1:js的事件浮升机制 例子2: 2.问题 如果有多个对象都有可能接受请求,如何避免避免请求发送者与接收者耦合在一起呢? 3.解决方案 职责链模式(Ch

设计模式学习笔记--状态(State)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--迭代(Iterator)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--访问者(Visitor)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

大话设计模式Python实现-职责链模式

职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式--职责链模式 8 职责链模式(Chain Of Responsibility):使多个对象