C++设计模式-单例模式理论与实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/84869096

目录

 

单例模式基本概念

 举个栗子


单例模式基本概念

大多数试试,一件产品简单,职责单一就是最好的选择;
就一个类而言,应该仅有一个引起他变化的原因【ASD】;
单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因;
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏【ASD】;
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离【ASD】;
如果能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责【ASD】;
要在类的职责分离上多考虑,做到单一职责,这样代码才易维护、易扩展、易复用、灵活多样;

 举个栗子

单例模式:
一个类只能创建一个对象

构造函数:
1.不能实例化对象,是private/protected的
2.通过静态成员函数申请对象空间,并返回地址
3.定义一个静态标记,记录对象个数,并控制
4.析构函数,将标记清空,以达到重复申请对象的目的

源码如下:

#include <iostream>
using namespace std;

class Base{

public:

	static int nFlag;

	static Base *CreateOJ(){

		if(1 == nFlag){

			nFlag = 0;7
			return (new Base);
		}
		else
			return NULL;
	}

	~Base(){

		nFlag = 1;
	}

private:

	Base(){

	}

	Base(int a){

	}

	Base(const Base &a){

	}

	Base &operator = (Base &a){

	}
};

int Base::nFlag = 1;


void main(){

	Base *base1 = Base::CreateOJ();
	Base *base2 = Base::CreateOJ();

	delete base1;
	base1 = NULL;	//避免指针悬挂

	Base *base3 = Base::CreateOJ();
	delete base3;

	getchar();
}

程序的逻辑:把所有构造函数私有,利用静态函数和成员的特点让某个类仅可创建一次;

程序运行截图,在delete base1前:

在delete base3前

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/84869096
今日推荐