• 单例模式


    单例模式在企业中运用的很广也是很重要的一种模式。

    1、要想明白单例模式,首先需要知道static关键字在C++中的含义

       小博,这边简要介绍一点:1、在C++中static修饰成员函数时,此函数能被本类的所有对象共享,只能出现一份,可以看做是全局函数

                   2、在C++中static修饰成员变量时,此变量只能在类中声明,类外定义,并且此变量只能被初始化一次

    了解了static对于函数和变量的两个特性后,不难想到单例模式的组成。简单来讲,就是使用static实例化一次对象即可

    单例模式有两种简单的实现方式一个是懒汉模式,一个是饿汉模式

    普通的懒汉模式:
    头文件名字为:a.h
    #ifdef A_H
    #define A_H
    class
    A{ publicstatic A *instance();
    int* setA();

    private:
       int a; A(int a = 0)(this->a = a){ }
    ~A(){ } //其他功能函数 void funA(); ..... } #endif //a.h
    .cpp文件
    #include “a.h” A
    * A::instance() { static A* g_A = nullptr; if (g_A == nullptr) { g_A = new A(); } } return g_A; }
    int*  A::setA()
    {
      return &a;
    }

        

    单例模式的性质:1、某个类只能有一个实例

            2、他必须自行创建这个实例

            3、它必须自行向整个系统提供

    调用单例模式很简单,包含头文件,想使用全局变量一样使用就可以了
    #include“a.h”

    int main(int argc,char* argv[])
    {
      A::instance->setA() = 1;
    }

         可看到例子使用static函数提供一个全局接口,然后使用static实例化一个对象,是不是很简单。使用static函数来实例化一个对象,是为了保证保证一个实例对象的完整性,与类绑定在一块。

           即实例化对象,并封装成静态成员函数调用

      注意一点:返回值如果是一个指针的话,一般是为了链式调用

          举个例子:当在一个类中定义一个结构体成员变量为私有属性的话,你如果想改变这个结构体中成员的变量,你可以写一个函数返回这个结构体的指针。

            上图有例子就是setA()函数。

    企业级的单例模式,考虑到单例实例化的时候可能存在多个线程执行,存在并发性的想象,因此会加上锁,防止并发性的发生。这种方式叫做“双重同步锁”    

  • 相关阅读:
    IOS中的国际化的使用(Xcode 6.0之后的使用步骤)
    KVC,KVO的区别和使用
    通知,代理,block 单例的使用和区别
    NSoperation的使用
    多线程之Nsthread的使用方法
    多线程的之GCD的介绍
    IOS中生成证书、真机调试、上线发布程序的步骤
    IOS之NavigationController跳转到指点的界面
    IOS之截取字符串的使用方法
    ios 之定时器的使用的技巧(结合runloop)使用
  • 原文地址:https://www.cnblogs.com/goul/p/10079390.html
Copyright © 2020-2023  润新知