博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现
阅读量:6231 次
发布时间:2019-06-22

本文共 1891 字,大约阅读时间需要 6 分钟。

单件模式确保一个类只有一个实例,并提供一个全局访问点。

确定在性能和资源上的限制,然后小心地选择适当的方案来实现单件,以解决多线程的问题。

代码链接:

单件模式类图

源代码:

 

#ifndef CHOCOLATEBOILER_H#define CHOCOLATEBOILER_H#include
class ChocolateBoiler{ private: ChocolateBoiler() { empty = true; boiled = false; } ~ChocolateBoiler() { uniqueInstance = 0; } ChocolateBoiler( const ChocolateBoiler& ); void operator=( const ChocolateBoiler& ); public: static ChocolateBoiler * getInstance() { if(uniqueInstance==0) { std::cout << "Creating unique instance of Chocolate Boiler" << std::endl; uniqueInstance = new ChocolateBoiler(); } std::cout << "Returning instance of Chocolate Boiler"<< std::endl; return uniqueInstance; } void fill() { if(isEmpty()) { empty = false; boiled =false; } } void drain() { if(!isEmpty() && isBoiled()) { empty = true; } } void boil() { if(!isEmpty() && !isBoiled()) { boiled = true; } } bool isEmpty() { return empty; } bool isBoiled() { return boiled; } protected: private: bool empty; bool boiled; static ChocolateBoiler* uniqueInstance;};#endif // CHOCOLATEBOILER_H

测试代码:

 

 

#include "ChocolateBoiler.h"ChocolateBoiler* ChocolateBoiler::uniqueInstance = 0;int main(){    ChocolateBoiler* boiler = ChocolateBoiler::getInstance();    boiler->fill();    boiler->boil();    boiler->drain();    ChocolateBoiler *boiler2= ChocolateBoiler::getInstance();    if(boiler == boiler2)        std::cout<<"Got same boiler"<

 

测试结果如下:

 

转载地址:http://wlqna.baihongyu.com/

你可能感兴趣的文章
在微信小程序中引入Promise
查看>>
Dpkg 常用指令操作快速参考
查看>>
yum安装mysql数据库
查看>>
mysql 二进制日志
查看>>
z-index属性失效(除position以外的特殊失效)
查看>>
ubuntu安装jdk,ubuntu设置java环境变量
查看>>
如何查看域用户密码
查看>>
如何保护你的U盘不被病毒写入
查看>>
Service Discovery: Eureka
查看>>
【CentOS 7Shell编程2】,shell中的逻辑判断#180206
查看>>
【CentOS 7Shell编程5】,for循环#180211
查看>>
标签管理#180804
查看>>
双节点RAC各个节点主机频繁自动重启故障解决
查看>>
硬盘安装linux
查看>>
cisco交换机-初级命令与例子
查看>>
SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO
查看>>
用CSS实现阴阳八卦图等图形
查看>>
linux文件扩展属性和ACL
查看>>
简洁的dropbox又可以访问了
查看>>
Bash字符串操作
查看>>