Creational.SingletonPattern(创建型模式—单例模式)

标签: DesignPattern(程序设计的指导思想)
7人阅读 评论(0) 收藏 举报
分类:

//保证一个类仅有一个实例,同时提供能对该实例加以访问的全局访问方法。


//******************************************************************
class CSingle{
public:
    //提供全局访问的访问点
    static CSingle* GetInst();
private:
    CSingle();//将构造函数设为私有属性
    static CSingle* pInst;
    //内部类,用于垃圾回收
    class CDestroy{//全局静态变量,会被自动销毁,从而实现对单例的垃圾回收
    public:
        ~CDestroy();
    };
    static CDestroy oDestroy;
    
    class CLock{
    private:
        HANDLE hMutex;
    public:
        CLock();
        ~CLock();
        void Lock();
        void Unlock();
    };
    static CLock oLock;

};



CSingle::CLock::CLock(){ hMutex = CreateMutex(NULL, FALSE, NULL); }
CSingle::CLock::~CLock() { CloseHandle(hMutex);}
void CSingle::CLock::Lock(){ WaitForSingleObject(hMutex, INFINITE);}
void CSingle::CLock::Unlock(){ ReleaseMutex(hMutex);}
    //******************************************************************
//提供全局访问的访问点
CSingle* CSingle::GetInst(){
    //static CSingleton instance;return &instance;
    if(NULL == pInst){
        pInst = new CSingle(); printf("new pInst;\n");
    }
    return pInst;
}

CSingle::CSingle(){}//将构造函数设为私有属性
CSingle* CSingle::pInst = NULL;
//内部类,用于垃圾回收
CSingle::CDestroy::~CDestroy(){
    if(pInst != NULL){//在这里销毁资源,比如数据库连接,句柄等。
        oLock.Lock();
        if(pInst != NULL){
            delete pInst; pInst = NULL; printf("delete pInst;\n");
        }
        oLock.Unlock();
    }
}
CSingle::CDestroy CSingle::oDestroy;
CSingle::CLock CSingle::oLock;


//客户端测试

void main()
{
    CSingle* pInst1 = CSingle::GetInst();
    CSingle* pInst2 = CSingle::GetInst();

    printf("pInst1 = %p, pInst2 = %p. ", pInst1, pInst2);

}





查看评论

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017-06-17 21:37:07
  • 709

创建型模式之单例模式

单例模式,英文原话为:Ensure a class has only one instance, and provide a gloabal point of access to it;即:确保一个类...
  • yanglun1
  • yanglun1
  • 2015-08-13 20:27:23
  • 990

设计模式总结之创建型模式

经过一个月的时间,终于把
  • u010158267
  • u010158267
  • 2014-05-24 11:39:42
  • 1218

创建型模式,共五种

设计模式(Design Patterns)                                   ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使...
  • jcxch
  • jcxch
  • 2016-11-18 19:23:17
  • 310

设计模式之创建型模式

  • 2015年11月24日 20:11
  • 3.47MB
  • 下载

设计模式--六种创建型模式

前言   每几种模式之间都有一定的联系,从中发现它们的相同点和不同点,研究发生改变的节点,这就是本篇博客所要说明的创建型设计模式之间的联系。它们包括:简单工厂模式、单例模式、工厂方法模式、抽象工厂...
  • m18633778874
  • m18633778874
  • 2017-04-13 16:58:25
  • 489

创建型模式 -- 单例模式

单例模式
  • u010823625
  • u010823625
  • 2015-12-04 14:10:04
  • 284

创建型模式—单例模式

单例模式(Singleton)定义:要求一个类有且仅有一个实例,并且提供了一个全局的访问点,在同一时刻只能被一个线程所访问。   单例模式的特点:   1>、单例类只能有一个实例。   2>、单例类必...
  • wdeng2011
  • wdeng2011
  • 2017-08-21 11:15:20
  • 130

创建型模式:【单例模式】

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负...
  • sxjxrxm
  • sxjxrxm
  • 2017-08-28 14:12:50
  • 94

创建型模式————单例模式

这个模式应该是大家使用的最多的模式了,也是了解最多的模式吧。这里我来说下我对这个模式的理解吧 1由来         对于系统中的某些类来说,只有一个实例很重要,例如,有很多首歌要播放,如果同时开...
  • u013424496
  • u013424496
  • 2016-06-03 17:13:04
  • 841
    个人资料
    等级:
    访问量: 1495
    积分: 880
    排名: 5万+
    文章存档