zoukankan      html  css  js  c++  java
  • 设计模式之单例模式(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++设计模式——单例模式

      

  • 相关阅读:
    hiho 103 平衡树·Treap
    HDU 5738 Eureka
    codeforces 682D Alyona and Strings
    Photoshop cs5 永久序列号
    httpd.exe你的电脑中缺失msvcr110.dll怎么办
    Gzip压缩启用图文方法详细说明
    帝国CMS开启全站搜索功能
    怎么给电脑统一设置查看文件为列表形式?
    帝国CMS网站地图sitemap的制作教程,分享2种帝国cms网站地图模板
    lol安装包打开没反应
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/5774528.html
Copyright © 2011-2022 走看看