我所理解的设计模式(C++实现)——单例模式(Singleton Pattern)
来源:互联网 发布:金针软件下载 编辑:程序博客网 时间:2024/06/05 06:35
单例模式,顾名思义,就是只能由一个实例,那么我们就必须保证
- 该类不能被复制。
- 该类不能被公开的创造。
那么对于C++来说,他的构造函数,拷贝构造函数和他的赋值函数都不能被公开调用。
但对于该私有的构造函数的构造时机上来说也可以分两种情况来构造:
- 只有当需要改类的时候去构造(即为懒汉模式)
- 在程序开始之前我就先构造好,你到时候直接用就可(即为饿汉模式)
那么我分别来说说这两种模式:
- 懒汉模式,静态局部变量只会被初始化一次即第一次执行的时候,其生命周期与程序的生命周期是相同的。这个同样适用于多线程的情况。
- class single1
- {
- public:
- static single1& getInstance()
- {
- static single1 instance;
- return instance;
- }
- int helloSingle() {return 1;}
- private:
- private:
- single1(){};
- single1(const single1&);
- single1& operator=(const single1&);
- };
- 饿汉模式,但是在main函数外面必须先调用其实例的构造,这个是静态实例的初始化,C/C++会保证其在进入main函数之前进行。
- class single2
- {
- public:
- static single2* getInstance()
- {
- return mInstance;
- }
- int helloSingle() {return 1;}
- private:
- static single2* mInstance;
- private:
- single2(){};
- single2(const single2&);
- single2& operator=(const single2&);
- };
- single2* single2::mInstance = new single2;
我们运用静态局部变量和静态实例的特性,使得我们的这两种模式都适用于多线程。
0 0
- 我所理解的设计模式(C++实现)——单例模式(Singleton Pattern)
- 我所理解的设计模式(C++实现)——单例模式(Singleton Pattern)
- 我所理解的设计模式(C++实现)——桥模式(Bridge Pattern)
- 我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- 我所理解的设计模式(C++实现)——组合模式(Composite Pattern)
- 我所理解的设计模式(C++实现)——外观模式(Facade Pattern)
- 我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 我所理解的设计模式(C++实现)——迭代器模式(Iterator Pattern)
- 我所理解的设计模式(C++实现)——迭代器模式(Iterator Pattern)
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 我所理解的设计模式(C++实现)——状态模式(State Pattern)
- 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 6174问题和字母重排问题
- STM32F103学习笔记(七) 定时器中断 (更新中断)
- Scrapy问题
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——单例模式(Singleton Pattern)
- iOS地图位置开发
- 我所理解的设计模式(C++实现)——桥模式(Bridge Pattern)
- Android Animations知识点
- 嵌入式linux内核和根文件系统
- 【学习笔记+实践】简单的导航条菜单制作
- HTML
- 约瑟夫问题
- NYOJ 464 Cookies【简单题】