xml地图|网站地图|网站标签 [设为首页] [加入收藏]

设计模式

来源:http://www.ccidsi.com 作者:最新解决方案 人气:154 发布时间:2019-11-07
摘要:转自: C#设计情势学习笔记-单例形式 这两天在学设计格局,学到创制型情势的时候,境遇单例方式(或叫单件形式卡塔尔,今后收拾一下笔记。 在《Design 帕特terns:Elements of Resuable

转自:

C#设计情势学习笔记-单例形式

  这两天在学设计格局,学到创制型情势的时候,境遇单例方式(或叫单件形式卡塔尔,今后收拾一下笔记。

  在《Design 帕特terns:Elements of Resuable Object-Oriented Software》中的定义是:Ensure a class only has one instance,and provide a global point of access to。它的要害特征不是依照顾客程序调用生成一个新的实例,而是决定某些项目标实例数量-唯风姿洒脱三个。(《设计格局-基于C#的工程化完结及扩展》,王翔卡塔尔国。也等于说,单例格局正是保证在全体应用程序的生命周期中,在任什么日期刻,被内定的类独有一个实例,并为客商程序提供三个到手该实例的全局访谈点。

  后生可畏、优良情势:

图片 1

public class Singleton
{
        private static Singleton instance;

        private Singleton()
        {

        }

        public static Singleton GetInstance()
        {
                if(instance==null)
                {
                        instance=new Singleton();
                }
                return instance;
        }
}

图片 2

  拆解解析如下:

  1卡塔 尔(英语:State of Qatar)首先,该Singleton的构造函数必得是私人民居房的,以保障顾客程序不会通过new(卡塔 尔(英语:State of Qatar)操作产生贰个实例,达到达成单例的指标;

  2卡塔 尔(阿拉伯语:قطر‎因为静态变量的生命周期跟全体应用程序的生命周期是同等的,所以能够定义贰个民用的静态全局变量instance来保存该类的唯生龙活虎实例;

  3卡塔 尔(英语:State of Qatar)必得提供一个大局函数访谈得到该实例,并且在该函数提供调控实例数量的功力,即由此if语句判定instance是或不是已被实例化,若无则能够同new(卡塔尔创立一个实例;否则,直接向客商重返一个实例。

  在这种精湛形式下,未有构思线程并发获取实例难点,即大概出现多个线程同时获得instance实例,且当时其为null时,就可以产出七个线程分别创立了instance,违反了单例法规。因而,需对地方代码矫正。

  二、八线程下的单例情势

  1、Lazy模式

图片 3

public class Singleton
{
       private static Singleton instance;
       private static object _lock=new object();

       private Singleton()
       {

       }

       public static Singleton GetInstance()
       {
               if(instance==null)
               {
                      lock(_lock)
                      {
                             if(instance==null)
                             {
                                     instance=new Singleton();
                             }
                      }
               }
               return instance;
       }
}

图片 4

  上述代码应用了再一次锁格局较好地消除了多线程下的单例形式实现。先看内层的if语句块,使用这些语句块时,先举办加锁操作,保证独有三个线程能够访谈该语句块,进而保险只创设了三个实例。再看外层的if语句块,那使得种种线程欲获取实例时不要每一回都得加锁,因为独有实例为空时(即须要创制二个实例卡塔 尔(英语:State of Qatar),才需加锁创立,若果已存在二个实例,就直接回到该实例,节省了质量源消费用。

  2、饿汉情势

  这种方式的性子是和煦主动实例。

图片 5

public sealed class Singleton
{
        private static readonly Singleton instance=new Singleton();

        private Singleton()
        {
        }

        public static Singleton GetInstance()
        {
               return instance;
        }
}

图片 6   下面使用的readonly关键能够跟static一齐行使,用于钦定该常量是体系级的,它的初始化交由静态构造函数完结,并得以在运维时编写翻译。在这里种情势下,无需和谐消除线程安全性难题,CLLX570会给我们缓慢解决。由此能够见见那个类被加载时,会活动实例化那个类,而不用在第一次调用GetInstance()后才实例化出唯后生可畏的单例对象。

设计方式(生机勃勃卡塔 尔(英语:State of Qatar), 转自: C#设计形式学习笔记-单例格局 最近在学设计方式,学到成立型模...

C# 设计情势(后生可畏卡塔尔,

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:设计模式

关键词: 68399皇家赌场

最火资讯