zoukankan      html  css  js  c++  java
  • 浅谈C++设计模式之单例模式

      单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

      通常我们可以让一个全局变量使得一个对象被访问,但它不能防止客户实例化多个对象,一个最好的办法就是让类自身负责保护它的唯一实例,这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。

      单例模式因为Singleton类封装它的唯一实例,这样它可以严格控制客户怎样访问它以及何时访问它,简单地说就是对唯一实例的受控访问。

      实现原理:将构造函数私有化,只提供一个静态方法来创建一个对象。

      (1) 将构造函数设置成private;

      (2) 声明一个静态的字段,初始化一个实例,返回Singleton对象;

      (3) 用静态方法或静态属性,返回那个唯一的实例

      当然,在对象用多线程时,可能会造成创建多个实例,可以给创建对象的过程加锁。

    • Singleton:定义一个Instance操作

    class Singleton{
    public:
        static Singleton* Instance();
    protected:
        Singleton(){}
        Singleton(const Singleton &instance){}
        Singleton& operator=(const Singleton &instance){}
    private:
        static Singleton* instance;
    };
    Singleton* Singleton::Instance(){
        if(instance == 0)
            instance = new Singleton;
        return instance;
    }
    Singleton* Singleton::instance = 0;

      其实,单例模式中最关键的就是把public的构造函数私有化。这样就把构造对象的实例化的权利交给了类本身,让Singleton来控制类的实例化。当然除了构造函数之外,还需要把类的控制复制函数(拷贝构造函数,赋值运算)私有化,因为客户端没有构造的权利,所以也就没有使用控制复制函数的权利。

    版权所有,欢迎转载,转载请注明出处!

  • 相关阅读:
    hdu1231 最大连续子序列
    Android 大众点评的接入
    Android Volley分析(一)——结构
    数字签名与数字证书技术简单介绍(一)
    HDU-3681-Prison Break(BFS+状压DP+二分)
    TNS-01201: Listener cannot find executablen 错误
    Android学习笔记(20)————利用ListView制作带竖线的多彩表格
    ListView美化:去阴影、底色、选中色
    android 用ListView实现表格样式
    Android播播放完SD卡指定文件夹音乐之后,自动播放下一首
  • 原文地址:https://www.cnblogs.com/whc-uestc/p/4783399.html
Copyright © 2011-2022 走看看