【C++ 设计模式】3.单例模式

阅读: 评论:0

【C++ 设计模式】3.单例模式

【C++ 设计模式】3.单例模式

  • 单例模式:一种创建型设计模式


  • 应用场景:
  1. 日志系统 。一个项目中应该只有一个日志系统,则应当确保日志对象只能被创建一份。
  2. 全局数据存储。C++中应尽量避免全局变量的使用。可以通过一个数据类专门负责存储数据,该类只存在一个实例化对象,其他各类可以在其中存储需要传递的数据。
  • 实现方式:

    首先,将类的构造函数、拷贝构造函数设为私有属性,则无法在类外通过new生成该类对象。
    然后,提供一个获取类唯一实例的公有接口,外部只能通过该接口获得该类的实例化对象。
    最后,在该公有接口中通过静态变量,确保该类只实例化了一次。

  • 优点:

    通过单例模式,可以实现类之间的数据传输,而不必写各类两两之间的通信接口,降低了代码的复杂度。

  • 缺点:

    单例模式的实现有多种模式,本文示范的代码并没有考虑多线程情况,在多线程下可能会生成多份实例。后续会将改进的单例模式更新在下方。


以下是单例模式的简易代码实现:
// Singleton.hpp
#include <iostream>
using namespace std;// 日志单件类
class LogSingleton {
public:// 对外提供获取唯一实例的接口static LogSingleton* Instance() {if (NULL == m_pInstance) {// 只第一次调用此接口时创建实例化对象m_pInstance = new LogSingleton();}return m_pInstance;}// 展示当前日志void Look() {printf("%sn", strLog.c_str());}// 写入日志void Write(string strNew) {strLog += strNew;}// 内存回收~LogSingleton() {if (NULL != m_pInstance) {delete m_pInstance;m_pInstance = NULL;}}private:// 将构造、拷贝构造函数设为私有LogSingleton() {}LogSingleton(LogSingleton& oLog) {}static LogSingleton* m_pInstance; // 指向唯一实例的指针string strLog;
};// 记得将static指针初始化
LogSingleton* LogSingleton::m_pInstance = NULL;
主函数中的使用
#include "Singleton.hpp"
int main()
{LogSingleton* pUserA = LogSingleton::Instance();pUserA->Write("Hello");LogSingleton* pUserB = LogSingleton::Instance();pUserB->Look();return 0;
}
控制台输出结果
Hello

本文发布于:2024-02-02 21:58:52,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170688233246710.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23