设计模式-单例模式

一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。

如何让一个类无法定义对象? #

接口类抽象类无法定义对象。

class A	//接口类
{
	public:
		virtual void AA() = 0;
};

如何定义一个整形变量,让他只能是10的倍数 #

如果想要规定别人必须怎么做,就要使用接口

class CNum
{
	private:
		int num;
	CNum()
	{
		num = 0;
	}
	void Set(int n)
	{
		num = n*10;
		cout << "附加应用" << endl;	//唯一操作num的方式,如果想用num,那在这个函数内写的其他内容都被捆绑执行
	}
};

封装过程 1:把int num隐藏起来不让别人用。 2:提供一个调用int num的接口并且这个接口的方法是固定的。


什么是单例模式? #

1.先不让一个类定义对象 2.再提供一个接口,产生一个对象


A *pA = NULL;
class A
{
	private:
		A(){}		//第一步:把构造函数设置为私有方法
	public:
		static A *GetObject()	//静态函数无需对象即可调用
		{
			if(pA == NULL)
			{
				pA = new A;		//第二步:如果没有对象,就创建一个对象,如果有,就不定义了。
			}
			return pA;
		} 
};

int main()
{
	A *pA = A::GetObject();
	return 0;
}

为什么要用单例模式 #


单例模式应用场景 #

打印机的任务队列 任务管理器


实现 #

class singleton
{
	public:
			static singleton *getInstance()
			{
				if(pSingle == NULL)
				{
					pSingle = new singleton;
					return pSingle;
				}
				 
			}
			static void DestroyInstance()
			{
				if(pSingle)
				{
					delete pSingle;
					pSingle = NULL;
				}
			
			}
	private:
		singleton(){}
		~singleton(){}
		singleton(const singleton&);
		static singleton *pSingle;	//初始化  1  pSingle = NULL(懒汉) pSingle = getInstance()(饿汉)
}