23种设计模式之单例模式(创建型,3 Singleton,c++实现)
2018-02-26 12:49
731 查看
1 恶汉式
#include <iostream>
using namespace std;
class Singleton {private:
Singleton() {cout << "I am singleton object" << endl;}public:static Singleton* getInstance() {return __singleton;}
static void freeInstance() {if (__singleton != NULL) {delete __singleton;__singleton = NULL;}}private:static Singleton* __singleton;};
Singleton* Singleton::__singleton = new Singleton;
void main() {Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();
if (s1 == s2){cout << "s1 is the same object as s2" << endl;}else {cout << "s1 is not the same object as s2" << endl;}
Singleton::freeInstance();}
2 懒汉式
#include "stdafx.h"#include <iostream>#include <Windows.h>#include <WinBase.h>#include <process.h>#include <mutex>
using namespace std;
mutex sLock;class Singleton {private:
Singleton() {cout << "Begin to execute construct function" << endl;Sleep(1000);cout << "End to execute construct function" << endl;}public:static Singleton* getInstance() {if (__singleton == NULL) {sLock.lock();if (__singleton == NULL) {__singleton = new Singleton;}sLock.unlock();}return __singleton;}
static void freeInstance() {if (__singleton != NULL) {delete __singleton;__singleton = NULL;}}
static void print() {cout << "printing\n";}private:static Singleton* __singleton;};
Singleton* Singleton::__singleton = NULL;
void MyThreadFunc(void *) {Singleton::getInstance()->print();}
void main() {HANDLE handle[10];for (int i = 0; i < 2; i++) {handle[i] = (HANDLE)_beginthread(MyThreadFunc, 0, NULL);}
for (int i = 0; i < 2; i++){WaitForSingleObject(handle[i], INFINITE);}
Singleton::freeInstance();}
#include <iostream>
using namespace std;
class Singleton {private:
Singleton() {cout << "I am singleton object" << endl;}public:static Singleton* getInstance() {return __singleton;}
static void freeInstance() {if (__singleton != NULL) {delete __singleton;__singleton = NULL;}}private:static Singleton* __singleton;};
Singleton* Singleton::__singleton = new Singleton;
void main() {Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();
if (s1 == s2){cout << "s1 is the same object as s2" << endl;}else {cout << "s1 is not the same object as s2" << endl;}
Singleton::freeInstance();}
2 懒汉式
#include "stdafx.h"#include <iostream>#include <Windows.h>#include <WinBase.h>#include <process.h>#include <mutex>
using namespace std;
mutex sLock;class Singleton {private:
Singleton() {cout << "Begin to execute construct function" << endl;Sleep(1000);cout << "End to execute construct function" << endl;}public:static Singleton* getInstance() {if (__singleton == NULL) {sLock.lock();if (__singleton == NULL) {__singleton = new Singleton;}sLock.unlock();}return __singleton;}
static void freeInstance() {if (__singleton != NULL) {delete __singleton;__singleton = NULL;}}
static void print() {cout << "printing\n";}private:static Singleton* __singleton;};
Singleton* Singleton::__singleton = NULL;
void MyThreadFunc(void *) {Singleton::getInstance()->print();}
void main() {HANDLE handle[10];for (int i = 0; i < 2; i++) {handle[i] = (HANDLE)_beginthread(MyThreadFunc, 0, NULL);}
for (int i = 0; i < 2; i++){WaitForSingleObject(handle[i], INFINITE);}
Singleton::freeInstance();}
相关文章推荐
- (C++)设计模式------单例模式 singleton(简单的实现和对象释放的控制) -- 创建型模式
- 23种设计模式之抽象工厂模式(创建型,2 AbstractFactory,c++实现)
- 23种设计模式之工厂模式(创建型,1 Factory,c++实现)
- 23种设计模式之原型模式(创建型,5 Prototype,c++实现)
- 23种设计模式之建造者模式(创建型,4 Builder,c++实现)
- singleton设计模式,c++实现
- 设计模式精解-GoF 23种设计模式解析附C++实现源码
- 23种设计模式之适配器模式(结构型,3 Adapter,c++实现)
- 23种设计模式:现代C++实现 V2.0
- 23种设计模式之代理模式(结构型,1 Proxy,c++实现)
- C++设计模式:Singleton的模板实现之一
- 设计模式C++实现_1_Singleton设计模式(简单的实现)
- 设计模式——单键模式(singleton)C++实现 【转载】
- 设计模式C++实现(1)Singleton
- 20/23种设计模式---C++实现
- 设计模式C++实现(5)——单例模式(Singleton)
- 23种设计模式汇总 (C++实现)
- 23种设计模式之三(创建型模式)Singleton模式
- 使用C++实现设计模式(连载): 第一回 Singleton 单例模式
- 23种设计模式的C++实现