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;
}