• 设计模式(五)——单例模式


    定义:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。

    单例模式:如Windows的任务管理器

    三个要点
       一是某个类只能有一个实例;
       二是它必须自行创建这个实例;
       三是它必须自行向整个系统提供这个实例

    Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,
                 让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;
                 在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例

    单例模式的使用步骤:
      a)  构造函数私有化。
      b)  提供一个全局的静态方法(全局访问点)来获取单例对象。
      c)  在类中定义一个静态指针,指向本类的变量的静态变量指针 。

    优点:
    (1) 单例模式提供了对唯一实例的受控访问。
    (2) 节约系统资源。 由于在系统内存中只存在一个对象。
    缺点:
    (1) 扩展略难。 单例模式中没有抽象层。
    (2) 单例类的职责过重。

    适用场景
    (1) 系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器
    或资源管理器,或者需要考虑资源消耗太大而只允许创建一个对象。
    (2) 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问
    点,不能通过其他途径访问该实例。

    #include <iostream>
    using namespace std;
    
    class Singleton
    {
    public:
        // 全局变量方法
        static Singleton * get_insatnce()
        {
            return instance;
        }
    private:
        // 不让类的外部再创建实例 声明为private
        Singleton()
        {
    
        }
        static Singleton* instance;// 指向本例的唯一实例指针
    };
    
    // 饿汉式——在编译期间就已经确认了这个唯一的实例
    Singleton* Singleton::instance = new Singleton; // 属于类的内部
    
    class Singleton2
    {
    public:
        static Singleton2* get_instance()
        {
            if (instance == NULL) {
                instance = new Singleton2;
            }
            return instance;
        }
    private:
        Singleton2() {
    
        }
        static Singleton2* instance;
    };
    
    // 懒汉式 遇到多线程的时候要注意加锁机制
    Singleton2* Singleton2::instance = NULL;
    
    int main()
    {
        Singleton* s1 = Singleton::get_insatnce();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    cordova的安装与配置
    JavaScript-string
    JavaScript-Number
    android-适配器
    网络操作-转码(乱码情况处理)
    网络操作-请求优先级
    Android读取权限
    I/O-<File区别>
    I/O-<File实例>
    I/O-<文件读写、输出>
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10357558.html
Copyright © 2020-2023  润新知