C++设计模式-更新中

单例模式

这个类实现了单例模式。单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。

ConnectionManager 类中,它通过以下方式实现了单例模式:

  1. 构造函数 ConnectionManager() 被声明为私有外部无法直接创建类的实例。
  2. 通过静态成员函数 getInstance() 来获取 ConnectionManager 类的实例。该函数使用了一个静态的 ConnectionManager 类型对象,并在首次调用时创建该对象,并保证只有一个实例被创建。
  3. 复制构造函数和赋值运算符被删除,禁止直接进行对象的拷贝构造和赋值操作,确保只有一个实例存在。

通过实现这些特性,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
相关推荐
mjhcsp6 分钟前
C++信息论超详解析
开发语言·c++
yusirxiaer8 分钟前
为什么 markRaw 能修复 Vue 3 + ECharts 的 resize 报错
javascript·vue.js·echarts
此生只爱蛋10 分钟前
【CAD】Parasolid:CAD的os
c++
门左有棵树19 分钟前
蓝桥杯C++组算法知识点整理(考前急救)
c++·算法·蓝桥杯
赛博切图仔27 分钟前
前端性能内卷终点?Signals 正在重塑我们的开发习惯
前端·javascript·vue.js
Highcharts.js1 小时前
抉择之巅:从2029年回望2026年——企业可视化“战略分水岭”?
前端·javascript·信息可视化·编辑器·echarts·highcharts
不爱吃炸鸡柳1 小时前
手撕哈希表(Hash Table):从原理到C++完整实现
c++·哈希算法·散列表
米丘1 小时前
Vite 开发服务器启动时,如何将 client 注入 HTML?
javascript·node.js·vite
军军君011 小时前
数字孪生监控大屏实战模板:空气污染监控
前端·javascript·vue.js·typescript·前端框架·echarts·数字孪生
charlie1145141911 小时前
通用GUI编程技术——图形渲染实战(三十一)——Direct2D效果与图层:高斯模糊到毛玻璃
c++·图形渲染·gui·win32