最常用的设计模式----单实例模式(C++ 实现)
2013-10-28 11:31
399 查看
单实例模式,本人认为最简单的设计模式之一,当然说的简单是针对一般情况,是不考虑线程安全等一系列其他问题。单实例模式也是最最最最常用的模式。我在没有学设计模式之前,都用到了这个模式,只是自己不知道罢了。它保证一个类之类实例化一次,并提供一个访问它的全局控制点。
比如你的应用程序有一个applicaiotn类,然后有一个个app 对象,显然每个应用只应该有一个这样的对象。 但是你又怕其他开发者一不小心实例化了这个对象。那么比需要单实例模式。
下面是单实例的结构图:
![](https://img-blog.csdn.net/20131028112552609?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGg4NDQzODY0MzQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
要做到单实例只需要简单的做到三点点即可:
A. 将你的将你的构造函数设为private的,这样就没人能创建这个类.
B.创建一个全局唯一实例
C.提供一个接口来获得这个实例。
代码:
简单吧,但是可惜这个类不是线程安全的,如果要线程安全,需要自己加锁。这点我们后面再实现。所以在需要使用全局配置、唯一资源的时候。防止再次实例化的时候,这时请采用单实例模式。欧拉~~~~
比如你的应用程序有一个applicaiotn类,然后有一个个app 对象,显然每个应用只应该有一个这样的对象。 但是你又怕其他开发者一不小心实例化了这个对象。那么比需要单实例模式。
下面是单实例的结构图:
要做到单实例只需要简单的做到三点点即可:
A. 将你的将你的构造函数设为private的,这样就没人能创建这个类.
B.创建一个全局唯一实例
C.提供一个接口来获得这个实例。
代码:
#include <iostream> using namespace std; class Application { public: ~Application(){}; static Application* getApp(){//其实就是上面提到的getInstance()函数 if(!m_instance) { m_instance = new Application(); } return m_instance; } private: Application():m_instance(NULL){}; static Application* m_instance; }; Application* Application::m_instance = NULL;//初始化静态变量 void main() { Application* app = Application::getApp(); //app.doSomeThing()... //Application newApp; //error 无法实例化 system("pause"); }
简单吧,但是可惜这个类不是线程安全的,如果要线程安全,需要自己加锁。这点我们后面再实现。所以在需要使用全局配置、唯一资源的时候。防止再次实例化的时候,这时请采用单实例模式。欧拉~~~~
相关文章推荐
- 单实例设计模式及C++实现
- 最常用的设计模式---观察者模式(C++实现)
- 最常用的设计模式---装饰者模式(C++实现)
- 最常用的设计模式---观察者模式(C++实现)
- 最常用的设计模式---命令模式(C++实现)
- 最常用的设计模式-----策略模式(C++实现)
- 最常用的设计模式---代理模式(C++实现)
- C++简单实现几种常用的设计模式
- 最常用的设计模式---模板方法模式(C++实现)
- c++常用设计模式实现
- 最常用的设计模式---外观模式(C++实现)
- 最常用的设计模式---组合模式(C++实现)
- 最常用的设计模式---适配器模式(C++实现)
- 设计模式C++实现(16)——状态模式
- 设计模式---简单工厂模式(c++实现)
- 设计模式C++实现——工厂模式
- [GoF设计模式]Builder模式和Facade模式的C++实现
- 设计模式C++实现(13)——中介者模式
- 设计模式--建造者模式(C++实现)
- 23种设计模式C++实例之外观模式