C++职责链模式的适用场景和代码示例
时间: 2023-03-12 07:19:53 浏览: 77
职责链模式适用于处理复杂的,分层的请求或操作,当某个请求或操作并不知道该委托给哪一个对象时,可以使用职责链模式。代码示例如下:public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor){
this.successor = successor;
}
public abstract void handleRequest();
}
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest() {
//如果本类处理不了,交给下一个处理者处理
if (successor != null) {
successor.handleRequest();
}
}
}
public class ConcreteHandlerB extends Handler {
@Override
public void handleRequest() {
//如果本类处理不了,交给下一个处理者处理
if (successor != null) {
successor.handleRequest();
}
}
}
相关问题
C++ 设计模式 聚合 C++代码示例
我可以回答这个问题。C 设计模式中的聚合是指将多个对象组合成一个更大的对象,这个更大的对象可以像单个对象一样被使用。下面是一个 C 代码示例:
```c
#include <stdio.h>
// 定义一个结构体表示一个点
typedef struct {
int x;
int y;
} Point;
// 定义一个结构体表示一个矩形
typedef struct {
Point topLeft;
Point bottomRight;
} Rectangle;
// 计算矩形的面积
int calculateArea(Rectangle rect) {
int width = rect.bottomRight.x - rect.topLeft.x;
int height = rect.bottomRight.y - rect.topLeft.y;
return width * height;
}
int main() {
// 创建两个点
Point p1 = {0, 0};
Point p2 = {5, 5};
// 创建一个矩形,包含这两个点
Rectangle rect = {p1, p2};
// 计算矩形的面积
int area = calculateArea(rect);
// 输出结果
printf("The area of the rectangle is %d\n", area);
return 0;
}
```
c++使用zmq inproc模式的示例代码
以下是一个简单的 C++ 使用 ZeroMQ 的 inproc 模式的示例代码:
```cpp
#include <zmq.hpp>
#include <iostream>
int main() {
// 创建上下文
zmq::context_t context(1);
// 创建一个 inproc 的 socket,并绑定到地址 "inproc://my-socket"
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("inproc://my-socket");
// 接收并回复消息
while (true) {
zmq::message_t request;
socket.recv(&request);
std::cout << "Received request: " << std::string(static_cast<char*>(request.data()), request.size()) << std::endl;
zmq::message_t reply(5);
memcpy(reply.data(), "World", 5);
socket.send(reply);
}
return 0;
}
```
以上代码演示了如何创建一个 inproc 模式的 socket,并绑定到地址 "inproc://my-socket"。然后不断循环接收消息,并回复 "World"。