《Head First 设计模式》例子的C++实现(5 单例模式)
最近在学习设计模式,用的是 《Head First 设计模式》这本书。感觉这本书写的还是很不错的,深入浅出的介绍了各种常用的设计模式。唯一有点不方便的地方是这本书的例子全都是用的 Java 来实现的。而我主要是用 C++。所以就动手将书上的代码用 C++ 来实现了一遍。
单例模式
单例模式相对比较简答,只要将类的构造函数搞成 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++实现(5 单例模式)的更多相关文章
- php 设计模式 例子
加载类:include("./Ren.class.php");include "./Ren.class.php"; require("./Ren.cl ...
- Java 设计模式泛谈&装饰者模式和单例模式
设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到 ...
- IOS设计模式之一(MVC模式,单例模式)
iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不 ...
- [Head First设计模式]一个人的平安夜——单例模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- 《javascript设计模式》读书笔记四(单例模式)
1.单利模式简单介绍 在<设计模式>中单利模式是一种比較简单的模式,定义例如以下: 确保某一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例. 在javascript中则将代码组 ...
- Java设计模式学习笔记,一:单例模式
开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的 ...
- JAVA设计模式详解(四)----------单例模式
上一章我们学习了装饰者模式,这章LZ带给大家的是单例模式. 首先单例模式是用来干嘛的?它是用来实例化一个独一无二的对象!那这有什么用处?有一些对象我们只需要一个,比如缓存,线程池等.而事实上,这类对象 ...
- 设计模式php篇(一)————单例模式
话不多说,直接上代码: <?php namespace DesignPattern; /** * php设计模式之单例模式 */ class SingleInstance { private s ...
- Python版设计模式: 创建型模式:单例模式和工厂模式家族
一. 单例模式(Singleton) 所谓单例模式,也就是说不管什么时候都要确保只有一个对象实例存在.很多情况下,整个系统中只需要存在一个对象,所有的信息都从这个对象获取,比如系统的配置对象,或者是线 ...
- .net4.0设计模式(一)使用Lazy的单例模式
延迟加载,亦称延迟实例化,延迟初始化等, 主要表达的思想是,把对象的创建将会延迟到使用时创建,而不是在对象实例化时创建对象,即用时才加载.这种方式有助于提高于应用程序的性能,避免浪费计算,节省内存的使 ...
随机推荐
- 四则运算 Java 姚康友,黎扬乐
github项目传送门:https://github.com/yaokangyou/arithmetic 项目要求 功能列表 [完成] 使用 -n 参数控制生成题目的个数 [完成] 使用 -r 参数控 ...
- Fiddler抓包学习——https请求的抓取
第一步:设置Fiddler windows下安装证书 打开fiddler 查看证书是否安装 说明已安装成功 设置端口号(下面手机设置代理所需要的) 第二部 手机端安装证书 通过fiddler查看电 ...
- C# 异步编程1 APM 异步程序开发
C#已有10多年历史,单从微软2年一版的更新进度来看活力异常旺盛,C#中的异步编程也经历了多个版本的演化,从今天起着手写一个系列博文,记录一下C#中的异步编程的发展历程.广告一下:喜欢我文章的朋友,请 ...
- [201804012]关于hugepages 3.txt
[201804012]关于hugepages 3.txt --//有一段时间我一直强调安装oracle一定要配置hugepage,因为现在的服务器内存越来越大,如果还使用4K的页面表,如果内存表占用内 ...
- PHP APP端支付宝支付
应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在 ...
- Django 项目连接数据库Mysql要安装mysqlclient驱动出错 : Failed building wheel for mysqlclient:
1,如果直接用 CMD命令:pip install mysqlclient ,会安装出错. 2,解决问题,参考了这个博友的帖子:https://blog.csdn.net/qq_29784441/ar ...
- January 11th, 2018 Week 02nd Thursday
Live, travel, adventure, bless, and don't be sorry. 精彩地活着,不停地前行,大胆冒险,心怀感激,不留遗憾. Everything we do is ...
- git 常用命令清单
- IDEA多线程调试设置
转至:http://blog.csdn.net/kevindai007/article/details/71412324 使用idea调试多线程的时候发现多线程无法调试,后来经过搜索发现,idea的断 ...
- YOLO(5) YOLO2 代码讲解
运行 darknet-rect2.exe detector demo F:/2Project/YOLO/yolo2/3data/TestData/data/voc.data F:/2Project/Y ...