责任链模式

Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连。
比如客户 Client 要完成一个任务,这个任务包括 a,b,c,d 四个部分。
首先客户 Client 把任务交给 A,A 完成 a 部分之后,把任务交给 B,B 完成 b 部分,…,
直到 D 完成 d 部分。
在这里插入图片描述
责任链优缺点:
优点:
1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。
2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。
3。类与类之间可以以松耦合的形式加以组织。
缺点:
因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。

class CarHandle {
public:
	virtual void handleCar() = 0;
	CarHandle* setNextHandle(CarHandle* handle) {
		m_carHanle = handle;
		return m_carHanle;
	}
protected:
	CarHandle* m_carHanle;
};
class HandleHead :public CarHandle {
public:
	void handleCar() {
		cout << "handle car head----------------" << endl;
		if (m_carHanle != NULL) {
			m_carHanle->handleCar();
		}
	}
};
class HandleBody :public CarHandle {
public:
	void handleCar() {
		cout << "handle car body----------------" << endl;
		if (m_carHanle != NULL) {
			m_carHanle->handleCar();
		}
	}
};
class HandleTail :public CarHandle {
public:
	void handleCar() {
		cout << "handle car tail----------------" << endl;
		if (m_carHanle != NULL) {
			m_carHanle->handleCar();
		}
	}
};
//常规流程
void testMethod() {
	CarHandle* head = new HandleHead();
	CarHandle* body = new HandleBody();
	CarHandle* tail = new HandleTail();
	head->handleCar();
	body->handleCar();
	tail->handleCar();
	delete tail;
	delete body;
	delete head;
}
//责任链流程 可更改任一环节
void testResponsibility() {
	CarHandle* head = new HandleHead();
	CarHandle* body = new HandleBody();
	CarHandle* tail = new HandleTail();
	tail->setNextHandle(body);
	body->setNextHandle(head);
	head->setNextHandle(NULL);
	tail->handleCar();
	delete tail;
	delete body;
	delete head;
}
int main() {
	//testMethod();
	testResponsibility();
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值