设计模式(4)-单例模式
来源:互联网 发布:linux telnet连接失败 编辑:程序博客网 时间:2024/04/30 00:11
单例模式
单例模式属于创建型的设计模式,其特点是在于保证一个类只会被实例化一次,可以作为全局唯一资源提供给系统。
代码
此处通过判断两个实例的地址是否一致来验证单例模式,代码中包含了保证多线程安全的单例模式实现。由于Python下的懒汉单例模式实现本人觉得是不可能的,因此下面使用了double check的方式实现了单例模式的饿汉实现。
C++代码
文件构成:
—include
——Singleton.h
—src
——Singleton.cpp
——main.cpp
代码如下:
—include/Singleton.h
#ifndef _SINGLETON_H_#define _SINGLETON_H_#include<pthread.h>class Singleton{public: static Singleton* GetInstance();private: Singleton(); static Singleton* instance; static pthread_mutex_t mutex; //用于释放instance的空间 class Gabor { public: ~Gabor(); }; static Gabor gabor;};#endif
—src/Singleton.cpp
#include<iostream>#include"Singleton.h"using namespace std;Singleton* Singleton::instance = NULL;pthread_mutex_t Singleton::mutex;Singleton::Gabor Singleton::gabor;Singleton::Singleton(){ ;}Singleton* Singleton::GetInstance(){ if(instance == NULL) { pthread_mutex_lock(&mutex); //double check if(instance == NULL) { instance = new Singleton(); } pthread_mutex_unlock(&mutex); } return instance;}Singleton::Gabor::~Gabor(){ delete Singleton::instance;}
—src/main.cpp
#include"Singleton.h"#include<iostream>using namespace std;int main(){ Singleton *instance1=Singleton::GetInstance(); Singleton *instance2=Singleton::GetInstance(); if(instance1 == instance2) { cout<<"This is a successful Singleton."<<endl; } else { cout<<"This is not a successful Singleton."<<endl; } return 0;}
Python代码
文件构成:
—Singleton.py
代码如下:
—Singleton.py(说明:Python中由于没有办法像 C++那样将构造函数设置为private属性从而实现不允许实例化,因此我们只能从Python的类构造函数入手,Python的类构造函数是new(cls, *args, **kwargs)函数,而不是init)
import threadingclass Singleton(object): __instance = None __lock = threading.Lock() def __init__(self): pass def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__lock.acquire() if not cls.__instance: cls.__instance = super(Singleton, cls).__new__(cls, *args, **kwargs) cls.__lock.release() return cls.__instanceif "__main__" == __name__: instance1 = Singleton() instance2 = Singleton() if id(instance1) == id(instance2): print "This is a successful Singleton." else: print "This is not a successful Singleton."
0 0
- 设计模式(4)-单例模式(Singleton)
- 设计模式学习4 -- 单例模式
- 设计模式(4) -- 单例模式(Singleton)
- 设计模式-4-单例模式
- 设计模式(4)之单例模式
- Java设计模式4:单例模式
- 设计模式(4) ------- 单例模式
- 设计模式(4)-单例模式
- 设计模式之4--单例模式
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- Python数据分析之pandas学习
- 微信小程序开发者工具快捷键
- Hadoop HA高可用集群搭建
- 图像有用区域1
- SpringMVC入门之八:使用Apache Tiles视图定义布局
- 设计模式(4)-单例模式
- 图像有用区域_撞墙法
- [2015-12-29]position详解
- 支付宝被骗怎么办?
- 吝啬的国度_数组存储
- mongoDB使用方法
- 值得推荐的C/C++框架和库
- 吝啬的国度_链式前向星
- 解决mysql服务无法启动问题