18行为型模式之责任链模式

概念

   Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。

例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分。

例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处理的部分交给省政府,省政府再完成自己职责范围内的部分,不能处理的部分交给中央政府,中央政府最后完成该项工作。

例3:软件窗口的消息传播。

例4:SERVLET容器的过滤器(Filter)框架实现。

角色和职责

Handler

处理类的抽象父类。

concreteHandler

具体的处理类。

责任链优缺点

优点:

1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。

2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。

3。类与类之间可以以松耦合的形式加以组织。

缺点:

因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。

适用于:

         链条式处理事情。工作流程化、消息处理流程化、事物流程化;

案例

//通过消息的传递,实现车辆的随意组装

#include <iostream>
using namespace std;
class CarHandle
{
public:
	virtual void HandleCar() = 0;

public:
	CarHandle *setNextHandle(CarHandle *carhandle)
	{
		this->carhandle = carhandle;
		return this->carhandle;
	}
protected:
	CarHandle *carhandle;
};

class CarHandleHead : public CarHandle
{
public:
	virtual void HandleCar()
	{
		cout << "处理车头" << endl;
		if (this->carhandle != NULL)
		{
			carhandle->HandleCar();
		}
	}
};

class CarHandleBody : public CarHandle
{
public:
	virtual void HandleCar()
	{
		cout << "处理车身" << endl;
		if (this->carhandle != NULL)
		{
			carhandle->HandleCar();
		}
	}
};

class CarHandleTail : public CarHandle
{
public:
	virtual void HandleCar()
	{
		cout << "处理车尾" << endl;
		if (this->carhandle != NULL)
		{
			carhandle->HandleCar();
		}
	}
};

void main()
{
	CarHandleHead *head = new CarHandleHead;
	CarHandleBody *body = new CarHandleBody;
	CarHandleTail *tail = new CarHandleTail;

	head->setNextHandle(body);
	body->setNextHandle(tail);
	tail->setNextHandle(NULL);

	//处理
	head->HandleCar();
	delete head;
	delete body;
	delete tail;
	system("pause");
	return ;
}

  

原文地址:https://www.cnblogs.com/gd-luojialin/p/10358026.html

时间: 2024-11-02 21:06:36

18行为型模式之责任链模式的相关文章

5 行为型模式之- 责任链模式

责任链模式介绍: 责任链模式是行为模式之一,什么是"链"?我们将多个节点首尾相连,就形成了链,对于链式结构,每个节点都可以拆开再重新连接,因此链式结构也具有很好的灵活性.将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从一个链的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止,我们将这样的一种模式称为责任链模式. 责任链模式的定义: 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,将这

行为型模式:责任链模式

文章首发:行为型模式:责任链模式 十一大行为型模式之四:责任链模式. 简介 姓名 :责任链模式 英文名 :Chain of Responsibility Pattern 价值观 :责任归我 个人介绍 :Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and

Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式

模式解说 责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 通常使用在以下场合 1 有多个对象可以处理一个请求,哪个对象处理该请求事先并不知道,而是在运行时自动确定: 2 希望在不明确制定接收者的情况下,向多个对象中的一个提交请求: 3 处理一个请求的对象集合需要动态指定时: 16.2 结构和用法 1.抽象处理者(THandler)-定义了一个处理请求的接口.如果需要,则声明一个方法,实现对后续对象的链接: 2.具体处理者(

设计模式-行为型模式,责任链模式(10)

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式. 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. class Event: def __init__(self, name): self.name = name def __str__(self): ret

java-设计模式(行为型)-【责任链模式】

1.Chain Of Responsibility(责任链模式) 定义:有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递, 直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求. 此处强调一点就是,链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个, 需要我们自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象. 优点:责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整.

Chain of Responsibility责任链模式(C++责任链模式)

Chainof Responsibility责任链模式:相当于MFC,windows程序设计窗口中的消息机制这类. MFC中,消息是通过一个向上递交的方式进行处理,例如一个WM_COMMAND消息的处理流程可能为: 1) MDI主窗口(CMDIFrameWnd)收到命令消息WM_COMMAND,其ID位ID_×××: 2) MDI主窗口将消息传给当前活动的MDI子窗口(CMDIChildWnd): 3) MDI子窗口给自己的子窗口(View)一个处理机会,将消息交给View: 4) View检查

命令模式、状态模式、责任链模式区别(转)

命令模式:一次设定,统一执行.状态模式:    相当于If else if else:    设计路线:各个State类的内部实现(相当于If,else If内的条件)    执行时通过State调用Context方法来执行.职责链模式:    相当于Swich case    设计路线:客户设定,每个子类(case)的参数是下一个子类(case).    使用时,向链的第一个子类的执行方法传递参数就可以. ———————————————————————————————————— 命令模式:将多

设计模式(13)--Chain of Responsibility(责任链模式)--行为型

1.模式定义: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 2.模式特点: 责任链模式通过建立一条链来组织请求的处理者,请求将沿着链进行传递,请求发送者无须知道请求在何时.何处以及如何被处理,实现了请求发送者与处理者的解耦.在软件开发中,如果遇到有多个对象可

设计模式之责任链模式20170717

行为型设计模式之责任链模式: 一.含义 责任链模式的核心在"链"上,"链"是由多个处理者(对象)组成的,由这条链传递请求,直到有对象处理它为止(在链中决定谁来处理这个请求),并返回相应的结果 二.代码说明 1.主要有两个角色 1)处理者 它能够对请求做出处理(请求得到处理则直接返回,否则传到下一个处理者),设置下一个处理者(这两个操作可以抽象出来), 同时每个处理者都有一个相应的处理级别,以及具体的处理操作(父类实现请求传递,子类实现请求处理) 2)被处理者(请求者