只有一个实例的类

 

转:http://hi.baidu.com/skyjsq/blog/item/889c3e50e966c25b1038c214.html

 

只有一个实例的类?----zz

2008年10月31日 星期五 18:49
设计模式里有种“单件模式”,就是一个类只有一个实例,很多场合会用到这种设计方法。
class A
{
public:

    
static A*GetSingleton()
    
{
        
staticbool inited= false;
        
if (!inited)
        
{
             a
= new A();
             inited
= true;
         }

        
return a;        
     }


    
staticvoid Release()
    
{
        
if (NULL!= a)
        
{
             delete a;
             a
= NULL;
         }

     }


private:
    
static A*a;
     A()
{}
    
~A(){}
}
;

使用的时候先声明A::a = NULL,然后用A::GetSingleton()就可以了。
因为构造和析构都是私有的,用户就不能自由的创建和销毁对像了,只能用GetSingleton()获得唯一的实例,和用Release()销毁它。

PS:

通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中,应用系统在启动时首先将配置文件加载到内存中,这些内存配置信息应该有且仅有一份。
  下面的代码应用了单身模式(Singleton)以保证Configure类只能有一个实例。这样,Configure类的使用者无法定义该类的多个实例,否则会产生编译错误。
 【C++代码】   
#include <iostream.h>   
class Configure  

       {
   __(1)__;
   Configure() {};            //构造函数
   Public;
   Static Configure*Instance();
   Public;
   Int GetConfigureData() {return data;} //获取配置信息
   Int SetConfigureDate(int m_data)
   { data=m_data; return data; }   //设置配置信息
   private:
   static Configure*_instance;
   int data; //配置信息
  };
  __(2)__=NULL;   
Configure * Configure;;Instance()

    {
   If (_instance= =NULL)

           {
    _instance=__(3)__;
   //加载配置文件并设置内存配置信息,此处省略
   }
   return__(4)__;
  }   
void main()  

      {
   Configure*t=NULL;
   t=__(5)__;
   int d=t->GetConfigureData();
   //获取配置信息后进行其它工作,此处省略
  }  
answers:  

        (1) private
  (2) Configure *Configure::_inStance
  (3) new Configure
  (4) _inStance
  (5) Configure::Instance()  

你可能感兴趣的:(设计模式,c,工作,null,delete,Class)