《Head First 设计模式》例子的C++实现(5 单例模式)
来源:互联网 发布:人工智能利与弊演讲ppt 编辑:程序博客网 时间:2024/05/25 08:12
最近在学习设计模式,用的是 《Head First 设计模式》这本书。感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式。唯一有点不方便的地方是这本书的例子全都是用的 Java 来实现的。而我主要是用 C++。所以就动手将书上的代码用 C++ 来实现了一遍。
单例模式
单例模式相对比较简答,只要将类的构造函数搞成 private 就行了。
///ChocolateBoiler.h#ifndef CHOCOLATEBOILER_H#define CHOCOLATEBOILER_Hclass 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 类型的变量是在程序运行的最开始初始化的。
1 0
- 《Head First 设计模式》例子的C++实现(5 单例模式)
- Head First设计模式-单例模式
- Head First设计模式笔记(单例模式)
- Head First 设计模式(5):单件模式
- 《Head First 设计模式》例子的C++实现(1 策略模式)
- 《Head First 设计模式》例子的C++实现(2 观察者模式)
- 《Head First 设计模式》例子的C++实现(适配器模式)
- 《Head First 设计模式》例子的C++实现(3 装饰模式)
- Head First设计模式 C++实现-Singleton(单件模式)
- 《Head First 设计模式》单件模式
- Head First-设计模式:单件模式
- head first设计模式之单例模式 c++解读
- 《Head First 设计模式》之单例模式
- 《head first 设计模式》之单例模式
- Head First设计模式之单例模式
- 调侃《Head First 设计模式》之单例模式
- 【head first 设计模式学习笔记】单例模式
- Head First设计模式笔记(6)---单件模式
- spark 性能调优
- JVM内存区域的划分
- Mac sublime text 3 Package Control 安装
- Hough
- 14 ZigBee小项目笔记day01
- 《Head First 设计模式》例子的C++实现(5 单例模式)
- linux task_struct的字段(PCB)
- Emmet:HTML/CSS代码快速编写神器
- python自学-第八次作业
- 大数据处理案例
- 糖葫芦好吃竹签儿窜——科技知识奇趣多示波器窜
- Java多线程系列-ThreadLocal
- bzoj4012开店
- 数据结构(C++)<图的邻接矩阵存储>