《Head First 设计模式》例子的C++实现(5 单例模式)
2017-02-19 13:56
609 查看
最近在学习设计模式,用的是 《Head First 设计模式》这本书。感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式。唯一有点不方便的地方是这本书的例子全都是用的 Java 来实现的。而我主要是用 C++。所以就动手将书上的代码用 C++ 来实现了一遍。
如果希望在程序一运行时就建立对象,可以这样写:
这里用到的知识点就是 static 类型的变量是在程序运行的最开始初始化的。
单例模式
单例模式相对比较简答,只要将类的构造函数搞成 private 就行了。///ChocolateBoiler.h #ifndef CHOCOLATEBOILER_H #define CHOCOLATEBOILER_H class ChocolateBoiler { public: void fill(); void drain(); void boil(); bool isEmpty() {return m_empty;} bool isBoiled() {return m_boiled;} static ChocolateBoiler * getInstance(); private: ChocolateBoiler(); bool m_empty; bool m_boiled; static ChocolateBoiler * m_instance; }; #endif // CHOCOLATEBOILER_H
///ChocolateBoiler.cpp #include "chocolateboiler.h" #include <iostream> using std::cout; using std::endl; ChocolateBoiler::ChocolateBoiler() { m_empty = true; m_boiled = false; } void ChocolateBoiler::fill() { if(isEmpty()) { m_empty = false; m_boiled = false; cout << "ChocolateBoiler is filled" << endl; // other things } } void ChocolateBoiler::drain() { if(!isEmpty() && isBoiled()) { // m_empty = true; cout << "ChocolateBoiler is drained" << endl; } } void ChocolateBoiler::boil() { if(!isEmpty() && !isBoiled()) { m_boiled = true; cout << "ChocolateBoiler is boiled" << endl; } } ChocolateBoiler * ChocolateBoiler::m_instance = nullptr; ChocolateBoiler * ChocolateBoiler::getInstance() { if(!m_instance) // 如果用在多线程环境下,这里需要加锁 { m_instance = new ChocolateBoiler; } return m_instance; }
如果希望在程序一运行时就建立对象,可以这样写:
ChocolateBoiler * ChocolateBoiler::m_instance = new ChocolateBoiler; ChocolateBoiler * ChocolateBoiler::getInstance() { return m_instance; }
这里用到的知识点就是 static 类型的变量是在程序运行的最开始初始化的。
相关文章推荐
- 《Head First 设计模式》例子的C++实现(2 观察者模式)
- 《Head First 设计模式》例子的C++实现(适配器模式)
- 《Head First 设计模式》例子的C++实现(2 观察者模式)
- 《Head First 设计模式》例子的C++实现(3 装饰模式)
- 《Head First 设计模式》例子的C++实现(5 单例模式)
- 《Head First 设计模式》例子的C++实现(1 策略模式)
- 《Head First 设计模式》例子的C++实现(1 策略模式)
- Head First 设计模式 C++实现
- Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现
- Head First 设计模式 (一) 策略模式(strategy pattern) C++实现
- [设计模式]_[中级]_[模板方法C++例子实现举例]
- Head First 设计模式 C++实现-Strategy(策略模式)
- Head First 设计模式 (四) 工厂模式(factory pattern) C++实现
- 测试类图Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现
- Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现
- 通过例子学设计模式之--组合模式以及使用场景说明(C++实现)
- Head First 设计模式 C++实现-Strategy(策略模式)
- Head First 设计模式 (七)适配器模式(adapter pattern) C++实现
- C++设计模式——工厂方法及工厂方法的隐藏实现(qq空间背景的例子)
- Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现