单例模式

什么是单例模式?

       单例模式是一种软件(程序)设计模式,在它的核心结构中只包含一个叫做单例的特殊类。通过单例模式可以保证系统(程序)中,应该该模式的类一个类只有一个实例,即一个类只有一个对象实例。

单例模式如何设计?

  1. 将类的构造函数设置为private属性(保证外部不可以通过对象调用构造函数,即不可以通过类名直接创建对象)
  2. 通过类型作用于调用静态成员函数创建对象(此时还可以创建很多个对象)
  3. 设置控制,通过一个静态成员标记来说明该类是否被实例化过,如果没有被实例化过,则返回一个类的实例,并修改标记;如果已经被实例化过则返回一个空指针。
  4. 在析构函数中恢复标记,保证对象可以重复申请(重复申请是指当对象被delete之后,还可以继续申请出一个,并非可以存在多个对象)

代码解释

# include<iostream>
using namespace std;

class A
{
private:
	A()//将构造函数设置为private属性
	{
		cout << "构造一个A的对象" << endl;
	}
public:
	static int sign;//控制标记
	static A* getA()//设置创建对象的接口
	{
		if (1 == sign)
		{
			sign = 0;//创建对象之后,修改标志,表示不再允许继续创建对象
			return new A();
		}
		else if (0 == sign)
		{
			cout << "已经存在一个A对象了,不允许继续构造" << endl;
			return NULL;
		}
	}
	~A()
	{
		cout << "恢复标志位" << endl;
		sign = 1;//存在的对象被析构后,要保证可以重新申请,因此恢复标志
	}
};
int A::sign = 1;
int main()
{
	A *p = A::getA();
	delete p;
	A *q = A::getA();
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值