责任链模式在C语言中的应用有哪些特点?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1265个文字,预计阅读时间需要6分钟。
许多新颖的设计模式,对责任链模式一知半解。今天以C++为例,简单分享。
责任链模式指多个对象都有机会处理请求,从而避免请求发送者和接收者之间的耦合关系。它使多个对象都有机会处理请求,避免请求发送者和接收者的耦合。
例如,在C++中实现责任链模式:
cpp#include #include #include
// 抽象处理者class Handler {public: virtual ~Handler() {} virtual void handleRequest(int request)=0;};
// 具体处理者Aclass ConcreteHandlerA : public Handler {public: void handleRequest(int request) override { if (request >=0 && request <10) { std::cout << ConcreteHandlerA handles request: << request << std::endl; } else { std::cout << ConcreteHandlerA can't handle request: << request << std::endl; std::cout << Passing to next handler... // 具体处理者Bclass ConcreteHandlerB : public Handler {public: void handleRequest(int request) override { if (request >=10 && request <20) { std::cout << ConcreteHandlerB handles request: << request << std::endl; } else { std::cout << ConcreteHandlerB can't handle request: << request << std::endl; std::cout << Passing to next handler... // 责任链构建class ChainBuilder {public: static Handler* buildChain() { Handler* handlerA=new ConcreteHandlerA(); Handler* handlerB=new ConcreteHandlerB(); handlerA->setSuccessor(handlerB); return handlerA; }}; int main() { Handler* handler=ChainBuilder::buildChain(); handler->handleRequest(5); handler->handleRequest(15); handler->handleRequest(25); delete handler; return 0;} 通过责任链模式,我们可以轻松地添加新的处理者,而无需修改请求发送者和接收者的代码。 好多新学设计模式的同学,对责任链模式一知半解,今天以C++为例,做个简单的分享。 责任链模式指使多个对象多有机会处理请求,避免请求发送者和接受者的耦合关系。将这些接受处理的对象连成一条链,并沿着该链处理请求,收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 可以通过以下方式实现责任链模式: 废话不多说,上代码: 上述代码,定义了一个抽象的处理者类 什么时候使用责任链模式? 当需要将请求发送给多个对象处理时或需要动态指定处理请求的对象集合时,如果在不明确接收者的情况下,将请求发送给多个对象中的一个或多个时,可以使用责任链模式。责任链模式将发送者和接收者解耦,提高了系统的灵活性和可扩展性。#include <iostream>
#include <list>
using namespace std;
// 抽象处理者类
abstract class Handler {
public:
virtual void handleRequest(Request request) = 0;
};
// 具体处理者类1
class ConcreteHandler1 : public Handler {
public:
void handleRequest(Request request) {
if (request == "request1") {
cout << "ConcreteHandler1 handles request1." << endl;
} else {
nextHandler->handleRequest(request);
}
}
};
// 具体处理者类2
class ConcreteHandler2 : public Handler {
public:
void handleRequest(Request request) {
if (request == "request2") {
cout << "ConcreteHandler2 handles request2." << endl;
} else {
nextHandler->handleRequest(request);
}
}
};
// 请求者类
class Requester {
public:
Requester(Handler* handler) {
handlerList.push_back(handler);
}
void sendRequest(Request request) {
handlerList.front()->handleRequest(request);
}
private:
list<Handler*> handlerList;
};
// 测试代码
int main() {
// 创建处理者对象
ConcreteHandler1 handler1;
ConcreteHandler2 handler2;
// 创建请求者对象并设置责任链
Requester requester(&handler1);
handler1.nextHandler = &handler2;
// 发送请求并传递给责任链上的处理者
requester.sendRequest("request1");
requester.sendRequest("request2");
requester.sendRequest("request3");
return 0;
}Handler,以及两个具体的处理者类ConcreteHandler1和ConcreteHandler2。我们还定义了一个请求者类Requester,它包含一个责任链,可以将请求传递给链上的每个处理者。在测试代码中,我们创建了处理者对象和请求者对象,并将责任链设置为ConcreteHandler1和ConcreteHandler2。然后,我们发送三个请求,并观察输出结果。
本文共计1265个文字,预计阅读时间需要6分钟。
许多新颖的设计模式,对责任链模式一知半解。今天以C++为例,简单分享。
责任链模式指多个对象都有机会处理请求,从而避免请求发送者和接收者之间的耦合关系。它使多个对象都有机会处理请求,避免请求发送者和接收者的耦合。
例如,在C++中实现责任链模式:
cpp#include #include #include
// 抽象处理者class Handler {public: virtual ~Handler() {} virtual void handleRequest(int request)=0;};
// 具体处理者Aclass ConcreteHandlerA : public Handler {public: void handleRequest(int request) override { if (request >=0 && request <10) { std::cout << ConcreteHandlerA handles request: << request << std::endl; } else { std::cout << ConcreteHandlerA can't handle request: << request << std::endl; std::cout << Passing to next handler... // 具体处理者Bclass ConcreteHandlerB : public Handler {public: void handleRequest(int request) override { if (request >=10 && request <20) { std::cout << ConcreteHandlerB handles request: << request << std::endl; } else { std::cout << ConcreteHandlerB can't handle request: << request << std::endl; std::cout << Passing to next handler... // 责任链构建class ChainBuilder {public: static Handler* buildChain() { Handler* handlerA=new ConcreteHandlerA(); Handler* handlerB=new ConcreteHandlerB(); handlerA->setSuccessor(handlerB); return handlerA; }}; int main() { Handler* handler=ChainBuilder::buildChain(); handler->handleRequest(5); handler->handleRequest(15); handler->handleRequest(25); delete handler; return 0;} 通过责任链模式,我们可以轻松地添加新的处理者,而无需修改请求发送者和接收者的代码。 好多新学设计模式的同学,对责任链模式一知半解,今天以C++为例,做个简单的分享。 责任链模式指使多个对象多有机会处理请求,避免请求发送者和接受者的耦合关系。将这些接受处理的对象连成一条链,并沿着该链处理请求,收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 可以通过以下方式实现责任链模式: 废话不多说,上代码: 上述代码,定义了一个抽象的处理者类 什么时候使用责任链模式? 当需要将请求发送给多个对象处理时或需要动态指定处理请求的对象集合时,如果在不明确接收者的情况下,将请求发送给多个对象中的一个或多个时,可以使用责任链模式。责任链模式将发送者和接收者解耦,提高了系统的灵活性和可扩展性。#include <iostream>
#include <list>
using namespace std;
// 抽象处理者类
abstract class Handler {
public:
virtual void handleRequest(Request request) = 0;
};
// 具体处理者类1
class ConcreteHandler1 : public Handler {
public:
void handleRequest(Request request) {
if (request == "request1") {
cout << "ConcreteHandler1 handles request1." << endl;
} else {
nextHandler->handleRequest(request);
}
}
};
// 具体处理者类2
class ConcreteHandler2 : public Handler {
public:
void handleRequest(Request request) {
if (request == "request2") {
cout << "ConcreteHandler2 handles request2." << endl;
} else {
nextHandler->handleRequest(request);
}
}
};
// 请求者类
class Requester {
public:
Requester(Handler* handler) {
handlerList.push_back(handler);
}
void sendRequest(Request request) {
handlerList.front()->handleRequest(request);
}
private:
list<Handler*> handlerList;
};
// 测试代码
int main() {
// 创建处理者对象
ConcreteHandler1 handler1;
ConcreteHandler2 handler2;
// 创建请求者对象并设置责任链
Requester requester(&handler1);
handler1.nextHandler = &handler2;
// 发送请求并传递给责任链上的处理者
requester.sendRequest("request1");
requester.sendRequest("request2");
requester.sendRequest("request3");
return 0;
}Handler,以及两个具体的处理者类ConcreteHandler1和ConcreteHandler2。我们还定义了一个请求者类Requester,它包含一个责任链,可以将请求传递给链上的每个处理者。在测试代码中,我们创建了处理者对象和请求者对象,并将责任链设置为ConcreteHandler1和ConcreteHandler2。然后,我们发送三个请求,并观察输出结果。

