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

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

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


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

    多线程时的单例

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

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


     双重锁定

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

    静态初始化

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

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



  • 相关阅读:
    js点击按钮为元素随机字体颜色和背景色
    js随即数字random实现div点击更换背景色
    while循环计算1-100和,1-100内偶数/奇数/被整除的数的和
    慕课手机展示页案例
    第3题:求子数组的最大和
    第4题:在二叉树中找出和为某一值的所有路径
    第5题:查找最小的K个元素
    Linux系统开启IPv6任播(anycast)地址
    第7题:判断两个链表是否相交
    第8题上:思维题
  • 原文地址:https://www.cnblogs.com/hailiang2013/p/2846419.html
Copyright © 2011-2022 走看看