国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

《Head First 設(shè)計模式》例子的C++實現(xiàn)(5 單例模式)

2019-11-08 02:29:26
字體:
供稿:網(wǎng)友

最近在學(xué)習(xí)設(shè)計模式,用的是 《Head First 設(shè)計模式》這本書。感覺這本書寫的還是很不錯的,深入淺出的介紹了各種常用的設(shè)計模式。唯一有點不方便的地方是這本書的例子全都是用的 java 來實現(xiàn)的。而我主要是用 C++。所以就動手將書上的代碼用 C++ 來實現(xiàn)了一遍。

單例模式

單例模式相對比較簡答,只要將類的構(gòu)造函數(shù)搞成 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) // 如果用在多線程環(huán)境下,這里需要加鎖 { m_instance = new ChocolateBoiler; } return m_instance;}

如果希望在程序一運行時就建立對象,可以這樣寫:

ChocolateBoiler * ChocolateBoiler::m_instance = new ChocolateBoiler;ChocolateBoiler * ChocolateBoiler::getInstance(){ return m_instance;}

這里用到的知識點就是 static 類型的變量是在程序運行的最開始初始化的。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 巴林左旗| 乳山市| 林州市| 托里县| 西平县| 涞源县| 章丘市| 云龙县| 新沂市| 乡城县| 察隅县| 牟定县| 黎平县| 永丰县| 凤山县| 临夏县| 五原县| 手游| 高雄市| 太保市| 黄陵县| 合水县| 清丰县| 鹰潭市| 海安县| 潼关县| 乌拉特后旗| 广州市| 浙江省| 许昌县| 离岛区| 清水河县| 石城县| 长海县| 龙口市| 新巴尔虎左旗| 保定市| 宜州市| 康马县| 乌兰浩特市| 肇东市|