• 设计模式之单例模式(c++)


    问题描述

    Singleton 模式解决问题十分常见, 我们怎样去创建一个唯一的变量( 对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象) 来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了,可能这也正是很多公司在招聘 Java 开发人员时候经常考察Singleton 模式的缘故吧。

    (全局变量在项目中是能不用就不用的,它是一个定时炸弹,是一个不安全隐患,特别是在多线程程序中,会有很多的不可预测性;同时,使用全局变量,也不符合面向对象的封装原则,所以,在纯面向对象的语言Java和C#中,就没有纯粹的全局变量。)

    在GOF的《设计模式:可复用面向对象软件的基础》中是这样描述单例模式的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为protected或private;最后,需要提供要给全局访问点,就需要在类中定义一个static函数,返回在类内部唯一构造的实例。

    代码实现

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Singleton
    {
    private:
    	int i;
    	static Singleton *instance;
    	Singleton(int i)
    	{
    		this->i = i;
    	}
    public:
    	static Singleton *getInstance()
    	{
    		return instance;
    	}
    	void show()
    	{
    		cout << i << endl;
    	}
    };
    Singleton* Singleton::instance = new Singleton(8899);
    
    class A :public Singleton
    {
    
    };
    
    int main()
    {
    	Singleton *s = Singleton::getInstance();
    	Singleton *s2 = A::getInstance();
    	cout << (s == s2) << endl;
    	return 0;
    }
    

    运行结果:1

    关于单例模式,推荐文章(个人觉得讲得是非常好的了):C++设计模式——单例模式

      

  • 相关阅读:
    !clrstack未显示任何方法名
    !dumpheap参数和SOS帮助系统的一些一般信息
    WinDbg Script---显示RCW对象引用的COM对象
    为什么不能将2个调试器附加到1个进程
    什么是互操作调试(Interop-Debugging)?
    为什么托管调试与本机调试不同?
    在WinDBG中管理源代码窗口
    如何从转储文件确定 /LARGEADDRESSAWARE
    Dump文件数据存储格式(九)
    Windbg命令系列---!cpuid(CPU信息)
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/5774528.html
Copyright © 2020-2023  润新知