zoukankan      html  css  js  c++  java
  • 单例模式(singleton)

    1、作用

    在完全使用面向对象模式编程情况下,需要一个唯一对象。这个时候不能定义static的全局变量,就需要使用到单例模式Singleton。(工厂模式中的工厂,可以只用一个)

    2、实现方式

    单例模式实现很简单,只是用一个类来封装一个静态类型的变量,提供一个获取静态成员变量的函数,并且函数中保证静态成员变量只new一次。单例模式返回的是静态对象的指针,用不完全类型只能定义指针变量,在定义instance时,Singleton类还是不完全定义的。

    3、C++代码

    Singleton.h

    class Singleton {
    public:
         static Singleton *Instance();
    private:
    Singleton(); // Singleton不应该在外边实例化,所以把构造函数声明为private的或者protected的
    static Singleton *instance; };

    Singletong.cpp

    #include <iostream>
    #include "Singleton.h"
    
    using namespace std;
    
    Singleton *Singleton::instance = nullptr;
    
    Singleton::Singleton() {
          cout<<"new instance ...."<<this<<endl;
    }
    
    Singleton *Singleton::Instance() {
          if(instance == nullptr)
                 instance = new Singleton();
    
          cout<<"get instance ..."<<instance<<endl;
          return instance;
    }

    test.cpp

    #include "Singleton.h"
    
    int main() {
         Singleton *s1 = Singleton::Instance();
         Singleton *s2 = Singleton::Instance();
         Singleton *s3 = Singleton::Instance();
    }

    输出:只new了一次对象

    new instance ... 0x161ac20
    get instance ... 0x161ac20
    get instance ... 0x161ac20
    get instance ... 0x161ac20
  • 相关阅读:
    放假归来
    用ObjectSpaces重建IBuySpy的数据访问层
    在SPS中加入自定义WebService
    AnnouncementOSD.xml
    Delphi8 is out !
    ASP.NET PreCompilation and KeepAlive
    ScottGu回答了Whidbey发布的时间问题
    DiskBased Caching in Whidbey, Longhorn…
    AnnouncementRSD.xml
    忙着满足客户的需求...
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/11805130.html
Copyright © 2011-2022 走看看