单例模式
来源:互联网 发布:淘宝千里眼好用不 编辑:程序博客网 时间:2024/06/16 09:23
单例模式:
确保一个类只有一个实例,并提供一个全局访问点。
单例模式类图:
经典单例模式实现:
class Singleton{private:static Singleton *uniqueInstance;Singleton(){}public:static Singleton *getInstance(){if (uniqueInstance == NULL) uniqueInstance = new Singleton();return uniqueInstance;}};下面来看如何将一个普通的巧克力工厂类转为单例类:
class ChocolateBoiler{private:bool empty;bool boiled;public:ChocolateBoiler(){//这是原来的构造函数empty = true;boiled = false;}void fill(){if (isEmpty()){empty = false;boiled = false;}}void drain(){ //排出煮沸的巧克力和牛奶if (!isEmpty() && isBoiled()) empty = true;}void boil(){//加热if (!isEmpty() && !isBoiled()) boiled = true;}bool isEmpty(){return empty;}bool isBoiled(){return boiled;}};改成单例类后如下:
class ChocolateBoiler{private:static ChocolateBoiler *uniqueInstance; //*bool empty;bool boiled;ChocolateBoiler(){//*这是新的构造函数empty = true;boiled = false;}public:static ChocolateBoiler *getInstance(){//*if (uniqueInstance == NULL) uniqueInstance = new ChocolateBoiler();return uniqueInstance;}void fill(){if (isEmpty()){empty = false;boiled = false;}}void drain(){ //排出煮沸的巧克力和牛奶if (!isEmpty() && isBoiled()) empty = true;}void boil(){//加热if (!isEmpty() && !isBoiled()) boiled = true;}bool isEmpty(){return empty;}bool isBoiled(){return boiled;}};
上面的经典单例模式存在多线程安全问题,解决方法参考面试题2:实现单例模式(offer)
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- Git服务器的搭建, 以及Android studio 上克隆git 服务器上的项目
- 检查网络设置
- Tomcat服务器接收Android客户端传输文件代码
- fastJson的使用
- AFNetworking 3.0的使用
- 单例模式
- 解决nginx反响代理web service的soap:address location问题
- Swift UIWebView的使用
- MATLAB R2015安装及破解
- PHPUnit从零开始(2):编写 PHPUnit 测试
- CMD 和 Git 中的设置使用代理
- 前端优化:DNS预解析提升页面速度
- 计算机网络面试知识点整理
- 配置OPENOMR