zoukankan      html  css  js  c++  java
  • [设计模式]之单例模式

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

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


    单例模式除了可以保证唯一实例外,还可以:
    单例模式一位Singleton类封装它的唯一实例,还可以严格地控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问。

    多线程时的单例

    在多线程程序中,多个线程同时,注意要是同时访问Singleton类,调用GetInstance方法,会可能造成创建多个实例

    这里就需要把临界区的代码给锁起来,保证只有一个线程在临界区之中,如果其他线程试图进入锁定代码,则它将一直等待,直到该对象被释放


     双重锁定

    为了不让线程每次都加锁,而只在实力未创建的时候在加锁处理

    静态初始化

    C#与公共语言运行库也提供了一种“静态初始化”方法,这种方法不需要开发人员显示的编写线程安全代码,既可以解决多线程下它是不安全的问题。

    总结:静态初始化的方式是在自己被加载时就将自己实例化了,所以被形象的称之为饿汉单例模式
           原先的模式是要在第一次被引用时,才会讲自己实例化,所以被形象的称之为懒汉单例模式
    饿汉单例模式:一加载就实例化对象,所以要提前占用系统资源。以空间换取时间
    懒汉单例模式:面临着多线程访问的安全性问题,需要做双重锁定这样的处理才可以保证安全,以时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间从C#语言来讲,饿汉单例模式已经足够满足我们的需求了。



  • 相关阅读:
    【linux 高级网络应用】1,2-企业IP规划部署实战,ip地址和子网划分
    【linux CCNP】4,5-linux网络及OIS-TCP/IP
    【linux CCNP】3-linux网络抓包和TCP三次握手
    【linux CCNA】1和2-linux网络基础知识入门 与 tcp协议
    CephFS文件储存
    OSD纵向扩容
    CEPH之对象存储
    CEPH之块存储
    ceph_dashboard
    ceph 创建和删除osd
  • 原文地址:https://www.cnblogs.com/hailiang2013/p/2846419.html
Copyright © 2011-2022 走看看