名称 (与开发人员共享的词汇)
单例模式
2.分类 (模式可以 归为的类目)
创建型模式
3.意图 (简短的描述该模式的作用)
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
4.动机 (给出问题以及解决问题的具体场景)
确保一个类只有一个对象的场景
5.适用性 (描述模式可以被应用在什么场合)
创建一个对象会消耗过多的资源,如访问io和数据库等
6.结构 (提供此模式的类结构图,显示类之间的关系)
o
7.参与者 (描述此设计中涉及的类和对象在模式中的责任和角色)
Client : 高层客户端
Singleton : 单例类
8.协作 (参与者如何在模式中合作)
通过将单例类构造函数私有化,禁止高层客户端通过new来构造单例对象,提供一个静态方法返回单例对象,
高层客户端通过此方法得到单例对象
9.范例代码 (提供实现模式的代码片段)
class Singleton
{
private:
Singleton();
Singleton(const Singleton & obj);
Singleton& operator = (const Singleton & obj);
public:
static Singleton * getInstance();
static Singleton * pInstance;
private:
Mutex mutex_;
};
Singleton* Singleton::getInstance()
{
if(pInstance == NULL)
{
Lock lock(mutex_);
if(pInstance == NULL)
{
pInstance = new Singleton();
}
}
return pInstance;
}
10.实现 (在实现该模式时使用的技巧以及需要注意的问题)
构造函数不对外开放,一般为private
通过一个static方法返回static单例类对象
确保单例类的对象只有一个,尤其是在多线程环境下,可通过锁机制,或pthread_once_t对象来约束
Java语言中要确保单例对象在反序列化时不会重新构造对象