• Design Pattern Singleton 单一模式


    单一模式的几个注意点:

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

    二) 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<<"破剑式……
    ";
    	}
    
    	void poDao()
    	{
    		cout<<"破刀式……
    ";
    	}
    
    	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


    执行:



    由于是单一模式,所以仅仅能有一个创始人独孤求败,呵呵,冲哥能够使用,不能是创始人。


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

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


  • 相关阅读:
    RabbitMQ学习笔记【1】
    【转】ES6学习笔记
    vue学习笔记【2】--模板语法
    vue学习笔记【1】
    npm使用
    Golang密码复杂度校验
    GORM的增删改查
    GORM:创建数据
    golang的time包:时间字符串和时间戳的相互转换
    输出10以内的所有正整数(while+if用法)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3784546.html
Copyright © 2020-2023  润新知