一、单例模式思想
1、核心
让一个类中只能生成一个对象,也就是如果使用者调用时是不能生成第二个对象的。
2、分析
在类中生成一个对象,那我们只能在生成对象上进行操作。
(1)对象生成的特点:
- 开辟内存空间
这是系统进行开辟的,我们无法进行操作 - 调用构造函数
我们可以让构造函数只被调用一次,也就是让对象只能在第一次调用时,调用构造函数。
(2)让构造函数只被调用一次的方法:
给出一个判断的标识: - 如果已经有对象,直接返回之前的对象。
- 如果没有对象生成,就调用构造函数生成唯一的对象。
(3)一般来说,构造函数是在public(公有)下的,那在任意位置都能调用,所以无法控制生成对象的个数。
(4)单例模式把构造函数写在private(私有)下,也就是把构造函数屏蔽起来,不让任意函数调用。
(5)那构造函数屏蔽起来,那怎么在调用点生成唯一的对象???
给出一个接口,用接口来生成唯一的对象。
也可以理解为在公有下写一个函数来生成唯一的对象。
(6)公有下的接口满足: - 不依赖对象,我们知道对象的生成是不能依赖对象的,所以要设置为静态的。
- 返回值不能用类类型,因为类类型会生成临时变量,违背我们生成唯一对象的初衷。所以一般要用*或者&,不会生成临时对象。
3、实例设计
class Master
{
public:
static Master* getInstance(char* name, int age, bool sex)//(1)
{
if (pm == NULL)
{
pm = new Master(name, age, sex);
}
return pm;
}
private:
Master(char* name, int age, bool sex)
:mname(new char[strlen(name) + 1]()), mage(age), msex(sex)
{
strcpy_s