zoukankan      html  css  js  c++  java
  • 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


    执行:



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


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

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


  • 相关阅读:
    ajax获取数据中文乱码问题最简单的完美解决方案
    修改easyui默认datagrid的表格内字体大小,样式
    setTimeout延迟加载方法的使用
    解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList的问题
    模块和包
    常用模块
    匿名函数及推导式
    python-迭代器和生成器
    python-内置函数
    python-递归
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3784546.html
Copyright © 2011-2022 走看看