《重学C++》8. 第8章 C++编程思想
对于各种设计模式解决了软件扩充时的难题,方便复用、后期改动小。
1. 单例模式:
单例模式特点是系统中该实例有且只有一个,并且其创建不被用户控制,用户需要使用时直接对唯一的实例进行唤醒。
例如:windows资源管理器、系统日志(日志只由一个程序读写,避免造成丢失等问题)。
根据上面的描述,从“创建不被用户控制”可知:实例的构造函数、事例对象需要是private的。那么如何在不能声明一个对象的情况下完成对对象的创建呢?这就需要该实例对象是static的,使用static不用手动管理资源分配、释放,还可以使得饿汉方式中实例对象永远存在(类似资源管理器,从开机到关机一直在后台运行);“用户需要使用时直接对唯一的实例进行唤醒”意味着需要实现一个专门用于返回实例的public方法,并且由于单例类不能被用户创建,这个方法只能是static的(否则没有对象可以调用这个方法)。
思路:
在singleTon类中有如下成员:
- singleTon类型的指针This,静态私有数据成员(唯一的数据成员);
This指针表示该单例模式的对象,只能存在一个。 - getInstance(),返回This指针,静态公有函数成员;
获取单例模式的对象,表示用户对单例模式对象的唤醒。 - doSomething(),无返回值,静态公有函数成员;
单例对象直接调用的方法,表示用户要求单例对象完成的某些功能。 - 私有构造和析构函数,防止用户。
代码
下面的代码均省略头文件、宏定义等。
singleTon.h部分代码:
1 | class singleTon |
singleTon.cpp
1 | singleTon* singleTon::This = NULL;//如果不写这一句,将会出错,提示无法解析的外部命令 |
主函数:
1 | int main() |
运行结果:
单例模式怎么实现?这篇文章给你讲透
https://zhuanlan.zhihu.com/p/103058726
观察者模式
设计模式|菜鸟教程
https://www.runoob.com/design-pattern/design-pattern-tutorial.html