设计模式4——创建型模式之单例模式

 
  定义 :单例模式 (SingletonPattern) ,保证一个类仅有一个实例,并提供一个访问它的全局访问点。

类型:创建型模式

类图

概述:

       在很多比较大型的程序中,全局变量经常被用到。如果不用全局变量,那么在使用到的模块中,都需要用参数将全局变量传入,这是非常麻烦的。虽然要减少使用全局变量,但是如果需要,还是要用。单例模式就是对传统的全局的一种改进。单例可以做到延时实例化,即在需要的时候才进行实例化。针对一些大型的类,延时实例化是有好处的。

      需要注意的是,在C#Java中,有饿汉单例模式(即在声明变量的时候就初始化)和懒汉模式(在需要使用的时候再初始化)。而在GoF的书中,只讲到了懒汉模式,这是因为C++的静态变量在初始化时具有不确定性。同一个类中的静态变量初始化与其声明顺序一致,但是不同类中的静态变量初始化顺序却是不确定的。

      另外在多线程中,需要注意访问的临界区,需要加Lock用以控制。

代码:添加了一个静态对象用来处理内存垃圾回收。

 
// C++
class  CSingleton
{
     // ,
private :
     CSingleton ( )
     {
     }
 
public :
     static  CSingleton *  GetInstance ( )
     {
         if  ( NULL  ==  m_pSingleton )
              m_pSingleton  =  new  CSingleton ( ) ;
 
         return  m_pSingleton ;
     }
 
     void  SetIdx ( int  _nIdx )
     {
         m_nIdx  =  _nIdx ;
     }
 
     int  GetIdx ( )
     {
         return  m_nIdx ;
     }
 
private :
     int  m_nIdx ;
 
     static  CSingleton *  m_pSingleton ;
public :
     class  CRecycle
     {
     public :
         ~ CRecycle ( )
         {
              if  ( NULL  != CSingleton :: m_pSingleton )
              {
                   deleteCSingleton :: m_pSingleton ;
              }
         }
     } ;
     static  CRecycle  m_recycle ;
} ;
 
// 
CSingleton * CSingleton :: m_pSingleton  =  NULL ;
CSingleton :: CRecycleCSingleton :: m_recycle ;
 
int  _tmain ( int  argc , _TCHAR *  argv [ ])
{
     CSingleton :: GetInstance ( ) -> SetIdx ( 1 ) ;
  
return0 ;
}
 

优缺点

  1. 优点,能够灵活地控制什么时候去访问。
  1. 缺点,和其他模块耦合性太强,作为全局变量的通病。

 

参考资料:

  1. 《设计模式——可复用面向对象软件基础》
  2. Java与模式》
  3. 《大话设计模式》

转载于:https://www.cnblogs.com/feihe0755/p/3510425.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值