原创 singleton单体(MFC设计模式)

2011-6-5 09:23 3586 8 10 分类: 工程师职场

20110605091648456.gif

教科书上的Singleton定义如下:

class Singleton
{
public:
static Singleton* Instance() ;
protected:
Singleton() {}
private:
static Singleton *_instance ;
} ;

Singleton* Singleton::_instance = 0 ;

Singleton* Singleton::Instance()
{
(_instance == 0) {

_instance = new Singleton() :

}

return _instance ;
}

  (1)因为返回的是指针,为防止用户调用delete函数,可把static Singleton *_instance;改为在Instance()中定义static Singleton _instance。这样显然更安全,同时也具有lazy initialization的特性(即第一次访问时才创建)。

  (2)假设需要从Singleton派生子类,而子类也需要有同样的性质,既只能创建一个实例。我觉得,这很难办。根本原因在于Instance()函数不是虚函数,不具有多态的性质。一种常用方法是把Instance()函数移到子类中,这时就只能用static Singleton *_instance,而不能用static Singleton _instance了,除非把_instance也要移到子类,无论怎么做都不优雅。另一种方法是用模板。具体用什么方法,只能根据实际情况权衡。

 


示例代码:

将Gramanager设为单体类,其中RemoveDecorator为全局函数,m_pGraphic为Gramanager的成员变量。

class Gramanager
{
public:
    static Gramanager* Instance();
protected:
    Gramanager(){};
private:
    static Gramanager* _instance;

    list<MGraphic*> m_pGraphic;

public:
 void RemoveDecorator();


};

实现;

 

#include "Myfigure.h"


Gramanager* Gramanager::_instance=0;

Gramanager* Gramanager::Instance(){
    if( _instance == 0){
        _instance = new Gramanager();
    }
    return _instance;
}
void Gramanager::RemoveDecorator()
{

  list<MGraphic*>::iterator it;
  for(it=m_pGraphic.begin();it!=m_pGraphic.end();it++)
  {
   delete(*it);
  }
 
}

在view使用,

Gramanager::Instance()->RemoveDecorator()

文章评论2条评论)

登录后参与讨论

用户159579 2011-7-4 09:58

⊙﹏⊙b汗。。。。

用户367863 2011-7-4 09:32

大哥,你太强了
相关推荐阅读
用户159579 2013-07-04 16:44
gerber文件转换 bl bo bs ko tl to ts
s ...
用户159579 2013-01-11 15:10
【博客大赛】PLC与上位机通信显示系统(四)
  一、     固件实现 1.       资源分析 1)      Ram资源 STM32F103VCT6共48K Ram资源,分配个内部变量和程序栈空间。 2)     ...
用户159579 2013-01-11 15:07
【博客大赛】PLC与上位机通信显示系统(三)
  一、     硬件电路设计 硬件电路的设计将在系统总体方案确立的基础上进行电路板的设计。其中,硬件电路设计主要应用ALTIUM公司的PROTEL软件,首先建立元件封装库,设计原理图绘制...
用户159579 2013-01-11 15:06
【博客大赛】PLC与上位机通信显示系统(二)
  一、     系统总体方案 根据系统的设计要求和需要的功能,对系统的总体方案进行选择,其中包括系统的显示方案、主芯片的选择、显示驱动的选择等等,将对最终确定的方案进行介绍。 1. ...
用户159579 2013-01-11 15:04
【博客大赛】PLC与上位机通信显示系统(一)
一、     系统概述 PLC与上位机通信显示系统主要完成与西门子PLC进行通信,将结果使用7寸彩屏进行显示,在系统上预留出与上位机(PC机)通信的接口和协议,可以保证上位机与系统的通信通畅。主要的...
用户159579 2012-08-18 16:45
PAL,NTSC,还有SECAM
  PAL,NTSC,还有SECAM,这是全球现行的三种模拟技术彩色电视的制式。 NTSC(National Television System Committee)制是最早的彩电制式,195...
我要评论
2
8
关闭 站长推荐上一条 /2 下一条