加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Design Pattern Singleton 单一模式

发布时间:2020-12-13 23:01:39 所属栏目:百科 来源:网络整理
导读:单一模式的几个注意点: 一) 设计单一模式,首先需要把构造函数给私有化了,不让外界访问,那么外界只能通过提供的函数获取一个新的类。 二) C++的单一模式,记得要在类外初始化一个类,否则或内存出错的。 三) 这个唯一的类必须是要静态的 程序: #ifnde

单一模式的几个注意点:

一) 设计单一模式,首先需要把构造函数给私有化了,不让外界访问,那么外界只能通过提供的函数获取一个新的类。

二) C++的单一模式,记得要在类外初始化一个类,否则或内存出错的。

三) 这个唯一的类必须是要静态的


程序:

#ifndef _SINGLETON_H
#define _SINGLETON_H

#include <iostream>
#include <string>

using namespace std;

class DuGuJiuJian
{
	string FounderName;

	DuGuJiuJian(string name) : FounderName(name)
	{
	}

	~DuGuJiuJian()
	{
		if (Founder) delete Founder;
	}
	
public:	
	void poJian()
	{
		cout<<"破剑式……n";
	}

	void poDao()
	{
		cout<<"破刀式……n";
	}

	inline static DuGuJiuJian *getInstance(string name = "No Name")
	{
		if (!Founder)
		{
			Founder = new DuGuJiuJian(name);
		}
		return Founder;
	}

	string getFounder()
	{
		return FounderName;
	}

private:
	static DuGuJiuJian *Founder;
};

DuGuJiuJian *DuGuJiuJian::Founder = nullptr;



void SingletonDuGuJiuJian_Run()
{
	DuGuJiuJian *jian = DuGuJiuJian::getInstance("独孤求败");

	cout<<"Founder is:"<<jian->getFounder()<<endl;

	DuGuJiuJian *jian_2 = DuGuJiuJian::getInstance("令狐冲");

	cout<<"Founder is:"<<jian_2->getFounder()<<endl;
	
	cout<<"令狐冲";
	jian_2->poDao();
	cout<<"令狐冲";
	jian_2->poJian();

	cout<<"Founder is:"<<DuGuJiuJian::getInstance()->getFounder()<<endl;
}
#endif


运行:



因为是单一模式,所以只能有一个创始人独孤求败,呵呵,冲哥可以使用,不能是创始人。


当然,本类不是十分完善,比如:还有多线程的时候可能会出问题,内存释放需要处理好,可以使用临时静态类。

不过这个模式的概念就是这样了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读