单例模式
这个类实现了单例模式。单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。
在 ConnectionManager
类中,它通过以下方式实现了单例模式:
- 构造函数
ConnectionManager()
被声明为私有 ,外部无法直接创建类的实例。 - 通过静态成员函数
getInstance()
来获取ConnectionManager
类的实例。该函数使用了一个静态的ConnectionManager
类型对象,并在首次调用时创建该对象,并保证只有一个实例被创建。 - 复制构造函数和赋值运算符被删除,禁止直接进行对象的拷贝构造和赋值操作,确保只有一个实例存在。
通过实现这些特性,ConnectionManager
类确保只能通过单例实例来访问和操作类的方法和成员变量,从而实现了单例模式。
cpp
#ifndef RDMA_SERVER_CONNECTIONMANAGER_H
#define RDMA_SERVER_CONNECTIONMANAGER_H
#pragma once
#include "../common/common.h"
#include "../queue_manager/QueueManager.h"
#include "../buffer_manager/BufferManager.h"
#include "./Connection.h"
// 是的,这个类实现了单例模式。单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。
// 在 `ConnectionManager` 类中,它通过以下方式实现了单例模式:
// 1. 构造函数 `ConnectionManager()` 被声明为私有,外部无法直接创建类的实例。
// 2. 通过静态成员函数 `getInstance()` 来获取 `ConnectionManager` 类的实例。该函数使用了一个静态的 `ConnectionManager` 类型对象,
//并在首次调用时创建该对象,并保证只有一个实例被创建。
// 3. 复制构造函数和赋值运算符被删除,禁止直接进行对象的拷贝构造和赋值操作,确保只有一个实例存在。
// 通过实现这些特性,`ConnectionManager` 类确保只能通过单例实例来访问和操作类的方法和成员变量,从而实现了单例模式。
class ConnectionManager {
public:
//单例模式
static ConnectionManager &getInstance();
ConnectionManager(ConnectionManager const &) = delete;
void operator=(ConnectionManager const &) = delete;
~ConnectionManager();
Connection *create(struct ibv_device *);
void destroy(Connection *);
struct ibv_qp *createQueuePair(Connection *, struct ibv_qp_attr *);
void connectQueuePair(Connection *, uint32_t, uint32_t, ibv_mtu, struct ibv_qp_attr *);
void resetQueuePair(struct ibv_qp *, struct ibv_qp_attr *);
private:
ConnectionManager();
std::shared_ptr<spdlog::logger> logger = nullptr;
std::shared_ptr<QueueManager> queueManager = std::make_shared<QueueManager>();
std::mutex queuePairsMtx;
};
#endif