设计模式网上资料整合理解——行为型模式(一)
意图:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
结构图:
适用性:
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
代码:
using System;
namespace DoFactory.GangOfFour.Chain.Structural
{
// MainApp test application
class MainApp
{
static void Main()
{
// Setup Chain of Responsibility
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
// Generate and process request
int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};
foreach (int request in requests)
{
h1.HandleRequest(request);
}
// Wait for user
Console.Read();
}
}
// "Handler"
abstract class Handler
{
protected Handler successor;
public void SetSuccessor(Handler successor)
{
this.successor = successor;
}
public abstract void HandleRequest(int request);
}
// "ConcreteHandler1"
class ConcreteHandler1 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 0 && request < 10)
{
Console.WriteLine("{0} handled request {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
}
// "ConcreteHandler2"
class ConcreteHandler2 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 10 && request < 20)
{
Console.WriteLine("{0} handled request {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
}
// "ConcreteHandler3"
class ConcreteHandler3 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 20 && request < 30)
{
Console.WriteLine("{0} handled request {1}",
this.GetType().Name, request);
}
else if (successor != null)
{
successor.HandleRequest(request);
}
}
}
}
转载于:https://www.cnblogs.com/end/archive/2007/04/28/730756.html
设计模式网上资料整合理解——行为型模式(一)相关推荐
- 23种设计模式介绍(一)---- 创建型模式
由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模 ...
- 【设计模式】(八)--创建型模式--建造者模式
[设计模式](八)–创建型模式–建造者模式 建造者模式 [设计模式](八)--创建型模式--建造者模式 建造者模式定义 构造者模式的优点 构造者模式的使用场景 构造者模式和工厂模式区别 构造者模式简单 ...
- iOS开发 - 面向对象设计的设计模式(一):创建型模式(附 Demo UML类图)
继上一篇的面向对象设计的设计原则,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章. 另外,本篇博客的代码和类图都保存在我的GitHub库中:中的Chapter2. 最开始说一下 ...
- 设计模式其实很简单之行为型模式
关注公众号获取更多资料 设计模式- 行为型模式 行为型模式描述的死程序运行时复杂的流程控制,描述了多个类或者对象之间怎样相互协调合作,涉及算法与对象之间的职责分配. 行为型模式是23中设计模式 ...
- 【设计模式】三大类:创建型模式、结构型模式、行为型模式
1 创建型模式 本人理解:以C++为例,创建对象时,用关键字new来创建(实例化)对象.用一个函数或类将new的过程封装起来,就是创建型模式. <设计模式>中的描述: 创建型模式抽象了实例 ...
- C#面向对象设计模式纵横谈——Singleton单件(创建型模式)
Singleton单件(创建型模式) 动机(Motivation) 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的 ...
- python与网页设计的区别_Python与设计模式(三):行为型模式(上)
接前文:kant li:Python与设计模式(二):结构型模式(下)zhuanlan.zhihu.com 行为型模式主要处理对象间的通信问题,包括责任链模式.命令模式.解释器模式.迭代器模式.观察 ...
- 【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
文章目录 一.七大设计原则 1.开闭原则 2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特原则 6.里氏替换原则 7.合成复用原则 二.创建型模式 0.简单工厂模式 ( 不属于 GOF ...
- 5.8 设计模式之State(状态)—对象行为型模式
5.8 State(状态)-对象行为型模式 参考文章 意图 状态模式是一种行为设计模式, 改变一个对象的内部状态进而改变其行为. 问题及情景 状态模式与有限状态机的概念紧密相关. 其主要思想是程序在任 ...
- .NET设计模式(7):创建型模式专题总结(Creational Pattern)
概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模 ...
最新文章
- C - Catch That Cow(BFS)
- 计算机网络安全基础知识笔记
- leetcode 153. 寻找旋转排序数组中的最小值(二分查找)
- 计算机应用基础案例实训教程,计算机应用基础案例式实训教程
- Docker技术入门与实战 第二版-学习笔记-2-镜像构建
- 【2014华为校园招聘成都上机笔试题目】
- [转]用了docker是否还有必要使用openstack?
- 正向混合云和反向混合云解析
- Eclipse中执行Tomcat源代码
- ceph 存储 对比_对象存储cleversafe对比ceph有哪些优势?
- [Linux] linux命令总结之dig命令
- 调用restFul接口如何实现返回的数据编码格式为utf-8
- eNSP华为路由器与交换机连接
- 如何挑选机械键盘?高性价比的机械键盘推荐
- 运行interproscan/iprscan会遇到的问题
- 端口Banner信息的获取
- 浙大邮箱添加进apple_如何在Apple Mail中使用智能邮箱组织电子邮件
- Spark学习(1)-Spark基础
- vue-devtools安装教程 附各种常见错误处理(图标不显示 图标显示控制台没用Vue选项卡)
- 33MW太阳能厂动工 日本福岛开启复兴之路
热门文章
- jQuery温习篇---强大的JQuery选择器
- 【翻译】Ext JS 5的委托事件和手势
- Illegal use of when-style tag without ...
- java.lang.UnsupportedOperationException WebView is not allowed in privileged processes
- async和await的错误捕获
- better-scroll使用的坑与心得
- tree 命令以树状图列出目录的内容
- angler前端框架_Google前端框架AngularJS创始人Misko Hevery专访
- java web重定向_Javaweb学习之资源重定向与请求转发
- mysqlplus 批量插入_解决SpringBoot+Druid+Mybatis Plus 执行MySQL批量插入,更新 报错的问题...