浅谈设计模式之四——Singleton模式
2015-04-22 23:06
344 查看
单例模式,即只有一个实例。
先上uml图:
uml解析:基本思路是,构造函数为protected或者private,类不能被实例化,否则就可以有多个实例。static的特性使得类不需要被实例化就能被调用(因为它和全局变量一样是放在数据段)
下面给出可以执行的代码:
singleton.h
singleton.cpp
main.cpp
执行结果:
可以看到执行结果是一样的。当然,这样的单例类其实是有缺陷的,比如多线程需要考虑的问题,还需要把重载操作符等,留给读者自己完成。
先上uml图:
uml解析:基本思路是,构造函数为protected或者private,类不能被实例化,否则就可以有多个实例。static的特性使得类不需要被实例化就能被调用(因为它和全局变量一样是放在数据段)
下面给出可以执行的代码:
singleton.h
#pragma once #include <iostream> using namespace std; class Singleton { protected: Singleton(void); ~Singleton(void); public: static Singleton * getInstance(); void showInstance(); private: static Singleton * m_Instance; };
singleton.cpp
#include "Singleton.h" Singleton * Singleton::m_Instance = NULL;//类外定义 Singleton::Singleton(void) { } Singleton::~Singleton(void) { } Singleton * Singleton::getInstance() { if ( m_Instance == NULL ) { m_Instance = new Singleton(); } return m_Instance; } void Singleton::showInstance() { cout<<m_Instance<<endl; }
main.cpp
#include "Singleton.h" int main(int argc,char ** argv) { Singleton *p1 = Singleton::getInstance(); p1->showInstance(); Singleton *p2 = Singleton::getInstance(); p2->showInstance(); return 0; }
执行结果:
可以看到执行结果是一样的。当然,这样的单例类其实是有缺陷的,比如多线程需要考虑的问题,还需要把重载操作符等,留给读者自己完成。
相关文章推荐
- 浅谈Android架构设计模式中MVC、MVP、MVVM
- 浅谈Java设计模式(五)原型模式(Prototype)
- 浅谈 java 设计模式--单例模式(Singleton pattern)
- 浅谈设计模式总结
- 浅谈设计模式之代理模式
- 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施
- 设计模式 总结 浅谈 二 + code
- 浅谈JAVA设计模式之——原型模式(Prototype)
- 菜鸟之路-浅谈设计模式之单例设计模式
- 浅谈Android MVC 设计模式
- Java设计模式 -- Singleton模式
- 浅谈JAVA设计模式之——责任链模式(COR)
- C#设计模式:Singleton模式
- 浅谈Java设计模式----建造者模式
- 浅谈设计模式五大原则
- 设计模式浅谈
- 浅谈MVP与Model-View-ViewModel(MVVM)设计模式
- 浅谈2D游戏设计模式3 - 冒险地图之美(1)
- 深入体验JavaWeb开发内幕——浅谈面向对象的设计模式