国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 会理县| 顺昌县| 陆丰市| 淳安县| 太康县| 浦县| 浮山县| 德格县| 长丰县| 台江县| 大厂| 肇源县| 马公市| 龙江县| 中西区| 湘阴县| 抚远县| 茶陵县| 郑州市| 盐津县| 阳高县| 建昌县| 大田县| 江山市| 阳春市| 南昌县| 廊坊市| 墨江| 鹿泉市| 浦东新区| 昌江| 孝感市| 玉林市| 湟源县| 台湾省| 舟山市| 桃园县| 杨浦区| 赞皇县| 米易县| 鲁甸县|