design pattern的学习和思考(4)

原创 2007年09月23日 21:30:00

单件模式(Singleton) 

单件模式是指类就一个且只有一个实例,其广泛的运用于软件设计中,我看到的很多游戏引擎都用到了单件模式,感觉上单件更像是全局变量的一种替代品,给外部提供了一个访问类内部函数的接口,看下面一个简单的例子

//in .h file
class SingletonClass
{
public:
    
static SingletonClass* Get()
    {
        
return m_self;
    }
    
static void Create()
    {
        
if(!m_self)
            m_self 
=  new SingletonClass;
    }
    
static void Destroy()
    {
        
if(m_self)
            delete m_self;
    }
private:
    SingletonClass();
    
~SingletonClass();
    
static SingletonClass* m_self;
}

//in .cpp file
SingletonClass*  SingletonClass::m_self(0);

这个是单件模式类的基本格式,有几点值得注意,首先,将构造和析构函数声明为私有函数,是为了防止其他对象实例的生成,然后声明三个基本函数,Create用来创建对象实例,Destroy用来销毁实例,Get用来得到此实例并通过它来访问类其他公共的成员方法,有时为了防止Get到一个空指针,可以这样写Get

static SingletonClass* Get()
{
    
if(!m_self)
        m_self 
= new SingletonClass;
    
return m_self;
}

使用这个类非常简单

 //创建实例
SingletonClass::Create();
//假设SingletonClass有一个成员函数A
SingletonClass::Get()->A();
//销毁实例
SingletonClass::Destroy();

 

 当我们需要很多singleton的类时,我们可以声明一个template类作为父类,以后只要继承这个类就可以将一个类声明为singleton

//in .h file
template<typename T>
class SingletonClass
{
public:
    
static T* Get()
    {
        
return m_self;
    }
    
static void Create()
    {
        
if(!m_self)
            m_self 
=  new T;
    }
    
static void Destroy()
    {
        
if(m_self)
            delete m_self;
    }
private:
    SingletonClass();
    
~SingletonClass();
    
static T* m_self;
}

//in .cpp file
template<typename T>
T
*  SingletonClass::m_self(0);

//声明一个新的singleton类
class MySingleton : public SingletonClass<MySingleton>
{}

singleton是比较容易理解,比较容易运用的一种设计模式,按照惯例,我们来看一下它的UML图

相关文章推荐

C++基本功和 Design Pattern系列(4-6)

======================================================  大家请把我的文章当参考,详细内容  还请参照 权威书籍   programming ...

Head First Design Pattern_P4

  • 2010年11月11日 11:18
  • 19MB
  • 下载

Head First Design Pattern - 学习笔记

1. 设计模式的本质,就是针对具体问题,以某种方式将变化的部分抽取并封装起来,使其独立于其他不变的部分,不对其造成影响。 2. 设计原则一:封装变化。找出应用中可能需要变化之处,把它们独立出来,不要...

Design Pattern学习笔记之状态机模式(State Patterns)

Design Pattern学习笔记之状态机模式(State Patterns) 1.    引子--Whois? 状态机模式用于需要根据内部状态改变行为的场景;状态机模式和策略模式类似但目标不同...

设计模式(design pattern) 学习记录

做数值计算的,不了解软件开发的模式,很遗憾。        有本书《 scientifc software desgin - object-orients way》,感觉写的重点不突出。又拿到一本中...

Design Pattern学习笔记之组合模式(Compound Patterns)

Design Pattern学习笔记之组合模式(Compound Patterns) 1.    引子--Whois? 我们之前介绍过很多设计模式,我们力图从各个角度辨析各种模式的异同,找到某种模...

设计模式学习笔记 - Design Pattern

设计模式学习笔记

Design Pattern学习笔记之工厂(简单工厂、工厂方法、抽象工厂)

Design Pattern学习笔记之工厂(简单工厂、工厂方法、抽象工厂) 1. 有点邪恶的new     我们都知道应该面向接口编程,可new方法让代码明确无比地跟具体的类绑定在一起,这样后续的...

Design pattern学习笔记 – what and why?

Design pattern学习笔记 – what and why? 1. 为什么要学习和应用设计模式     我们在设计过程中面临的问题有很多已经被前人解决过,设计模式是前人经验的总结,学习和应...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:design pattern的学习和思考(4)
举报原因:
原因补充:

(最多只允许输入30个字)