美文网首页
如何实现一个单实例的管理类

如何实现一个单实例的管理类

作者: crazyhank | 来源:发表于2019-03-24 20:24 被阅读0次

很多人用C++语言开发软件的时候,一般都会碰到要实现一个管理类,并且一般来说一个系统只允许存在一个管理类的对象,这就需要将管理类设计成单实例模式。如何实现单实例模式,这是一个非常传统的设计模式问题,但是很多程序员都不太清楚,这里以一个简单的示例代码来说明。

首先,我们来定义一个管理类:

$vim manager.hpp

#ifndef MANAGER
#define MANAGER

class manager {
public:
        static manager* getInstance();
private:
        manager();
        virtual ~manager();

        static manager* instance;

};
#endif

为了防止用户使用manager类进行创建对象,我们将类的构造函数和析构函数都定义成private属性。并且,在这里定义了公开的静态成员函数getInstance用于获取单实例对象,而这里的单实例对象其实是保存在一个静态成员变量instance中的,而且它也是private属性的。

然后我们来看看这个manager类的实现代码:

$ vim manager.cpp

#include <iostream>
#include "manager.hpp"

using namespace std;


manager* manager::instance = nullptr;

manager::manager()
{

}

manager::~manager()
{

}


manager* manager::getInstance()
{
        if (instance == nullptr) {
                cout << "creating new instance..." << endl;
                instance = new manager();
        }

        return instance;
}

这里需要注意的时候类头文件中声明的静态成员变量必须在实现代码中初始化。

可以看到getInstance的实现代码中永远返回的是同一个instance实例。

最后我们写一个main函数测试运行下:

$vim main.cpp

#include <iostream>
#include "manager.hpp"

using namespace std;
int main()
{
        manager* mgr1 = manager::getInstance();

        manager* mgr2 = manager::getInstance();

        //manager* mgr3 = new manager();  //不能调用new函数了,因为是private属性了

        if (mgr1 == mgr2) {
                cout << "mgr1 == mgr2" << endl;
        }

        return 0;
}

$ ./main
creating new instance...
mgr1 == mgr2

相关文章

  • 如何实现一个单实例的管理类

    很多人用C++语言开发软件的时候,一般都会碰到要实现一个管理类,并且一般来说一个系统只允许存在一个管理类的对象,这...

  • 单例模式(创建型)

    特点:一个类只能有一个实例对象。单例实现要求: 静态单例实例对象 私有构造方法 public 静态函数用以返回实例...

  • ios 单例 Singleton

    单例模式就是只有一个实例,确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例,一个单例类可以实现在不同...

  • java与kotlin实现单例模式

    单例模式的意义: 确保一个类只有一个实例,而且自行实例化并且向系统提供这个实例。 单例模式的实现条件 ①一个pri...

  • tornado RequestHandler

    不是单例实现的,每请求一次则实例化一个RequestHandler实例对象。

  • 设计模式:单例

    单例模式的基本介绍单例模式的实现源码中的单例模式记录 单例模式的基本介绍 定义:确保一个类只有一个实例,自行实例化...

  • 【从0开始学Laya】10-定时器

    Timer 是时钟管理类,它是一个单例,不要手动去new实例化此类,应该通过 Laya.timer 访问。 1.延...

  • 2020-04-02 Keepalived高可用集群应用实践(二

    1. Keepalived高可用服务单实例实战 1.1 配置Keepalived实现单实例单IP自动漂移接管 事实...

  • 设计模式

    1.设计并实现单例模式 要求:①单例类只能有一个实例②这个实例只能由单例类来生成③必须给所有其他对象提供这个实例目...

  • 单实例HBase(Standalone HBase)安装使用简介

    单实例HBase(Standalone HBase) 本文介绍如何在本地文件系统上运行一个单实例HBase,下面的...

网友评论

      本文标题:如何实现一个单实例的管理类

      本文链接:https://www.haomeiwen.com/subject/uohpvqtx.html