23种设计模式之(十五)责任链模式(python_c++实现)

23种设计模式之(十五)责任链模式(Chain of Responsibility )

本文主要介绍23种设计模式之责任链模式,附详细python/c++示例代码。

  • 概念
  • 应用场景
  • 注意事项
  • 代码示例
  • 总结
  • 代码链接

责任链模式(Chain of Responsibility )

概念

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

GoF对责任链模式的定义是:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

应用场景

(1)、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。

(2)、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。

(3)、可动态指定一组对象处理请求。

代码示例

C++代码示例

/************************************************************************/
/* 设计模式专题
/*
/* 责任链模式
/*
/* Author  : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date    : 20180918
/************************************************************************/
#include <iostream>
using namespace std;

//造完车 以后,需要把任务 传递下去
class CarHandle
{
public:
	virtual void HandleCar() = 0;
	CarHandle *setNextHandle(CarHandle *handle)
	{
		m_handle = handle;
		return m_handle;
	}

protected:
	CarHandle *m_handle;  //下一个处理单元
};

class HeadCarHandle : public CarHandle
{
public:
	virtual void HandleCar()
	{
	
		printf("make car head\n");
		//造 玩车头 以后 把任务递交给 下一个处理者
		if (m_handle != NULL) 
		{
			m_handle->HandleCar(); //
		}
	}
};

class BodyCarHandle : public CarHandle
{
public:
	virtual void HandleCar()
	{
		printf("make car body\n");
		//造 造 车身 以后 把任务递交给 下一个处理者
		if (m_handle != NULL) 
		{
			m_handle->HandleCar(); //
		}

	}
};

class TailCarHandle : public CarHandle
{
public:
	virtual void HandleCar()
	{
		printf("make car tail\n");
		//造 造车尾 以后 把任务递交给 下一个处理者
		if (m_handle != NULL) 
		{
			m_handle->HandleCar(); //
		}
	}
};


void main()
{
	CarHandle *headHandle = new HeadCarHandle;
	CarHandle *bodyHandle = new BodyCarHandle;
	CarHandle *tailHandle = new TailCarHandle;

	headHandle->setNextHandle(tailHandle);
	tailHandle->setNextHandle(bodyHandle);
	bodyHandle->setNextHandle(NULL);
	headHandle->HandleCar();

	delete headHandle;
	delete bodyHandle;
	delete tailHandle;

}

python代码示例

# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
# 
# 责任链模式
# 
# Author  : zzl
# 
# 编程环境: window10 python2.7
# 
# Date    : 20180918
##################################################################

# 造完车以后, 需要把任务传递下去
class CarHandle(object):
    def __init__(self):
        self.m_next_handle = None

    def handcar(self):
        pass


class HeadCarHandle(CarHandle):
    def handcar(self):
        print("make car head")
        # 造玩车头以后把任务递交给下一个处理者
        if self.m_next_handle:
            self.m_next_handle.handcar()


class BodyCarHandle(CarHandle):
    def handcar(self):
        print("make car body ")
        # 造玩车身以后把任务递交给下一个处理者
        if self.m_next_handle:
            self.m_next_handle.handcar()


class TailCarHandle(CarHandle):
    def handcar(self):
        print("make car tail ")
        # 造玩车身以后把任务递交给下一个处理者
        if self.m_next_handle:
            self.m_next_handle.handcar()


if __name__ == "__main__":
    headHandle = HeadCarHandle()
    bodyHandle = BodyCarHandle()
    tailHandle = TailCarHandle()
    headHandle.m_next_handle = tailHandle
    tailHandle.m_next_handle = bodyHandle
    bodyHandle.m_next_handle = None
    headHandle.handcar()



源码链接

设计模式(十五)责任链模式示例代码(python–c++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值