[设计模式]单例模式(Singleton)
2013-03-07 10:07
99 查看
1. 意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. 结构与参与者
3.效果
1)对唯一实例的受控访问
因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。2)缩小名称空间
Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名称空间。3)允许对操作和表示的精化
Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。4)允许可变数目的实例
这个模式使得你易于改变你的想法,并允许Singleton类的多个实例。此外,你可以用相同的方法来控制应用所使用的实例的数目。只有允许访问Singleton实例的操作需要改变。5) 比类操作更灵活
另一种封装单件功能的方式是使用类操作(C++中的静态成员函数)。但类操作难以改变设计以允许一个类有多个实例。此外C++中静态成员函数不是虚函数,因此子类不能多态地重定义它们。4.代码示例
#include <iostream> using namespace std; class Singelton { private: Singelton(){} //将构造函数私有化,防止外部创建实例 static Singelton* singel; //用静态变量来存储唯一实例 public: static Singelton* GetInstance() //里没有考虑多线程,没有用线程锁 { //单例模式是要考虑多线程的 if(singel == NULL) { singel = new Singelton(); } return singel; } }; Singelton* Singelton::singel = NULL;//注意静态变量类外初始化 //客户端: int main() { Singelton* s1=Singelton::GetInstance(); Singelton* s2=Singelton::GetInstance(); if(s1 == s2) cout<<"same instance"<<endl; else cout<<"no"<<endl; return 0; }
相关文章推荐
- Java设计模式(5)Singleton模式 只有一个实例
- 设计模式之单例模式(Singleton)
- 设计模式之Singleton - 单态模式
- 设计模式----Singleton(单例)
- 创建型设计模式---JAVA Singleton模式(单身模式)
- 设计模式--单例模式Singleton(创建型)
- 设计模式之单例模式(Singleton)
- 设计模式C++描述----01.单例(Singleton)模式
- 笔记:Gof设计模式--Singleton
- JAVA设计模式之三单例模式(Singleton)
- 设计模式--单例模式Singleton
- JAVA设计模式之三单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 【Java】单例设计模式Singleton
- [设计模式-创建型]单态(Singleton)
- 设计模式之单例模式:singleton
- 设计模式之单例模式Singleton
- 设计模式袖珍版 连续转载之 - Singleton(单态)
- Singleton (单件) 设计模式
- 在 Java 中应用设计模式 -- Singleton