<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Head First設計模式之單例模式

      一、定義

      保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。

       

      • Singleton模式中的實例構造器可以設置為protected以允許子類派生。
      • Singleton模式一般不要支持ICloneable接口,因為這可能會導致多個對象實例,與Singleton模式的初衷違背。
      • Singleton模式一般不要支持序列化,因為這也有可能導致多個對象實例,同樣跟Singleton模式的初衷違背。
      • Singleton模式只考慮到了對象創建的管理,并沒有考慮對象銷毀的管理。就支持垃圾回收的平臺和對象的開銷來講,我們一般沒必要對其銷毀進行特殊的管理。

       

      二、結構

      創建一個 SingleObject 類。SingleObject 類有它的私有構造函數和本身的一個靜態實例。

      SingleObject 類提供了一個靜態方法,供外界獲取它的靜態實例。

      三、適用場景

       1、要求生產唯一序列號。

      2、WEB 中的計數器,不用每次刷新都在數據庫里加一次,用單例先緩存起來。

      3、創建的一個對象需要消耗的資源過多,比如 I/O 與數據庫的連接等。

       

      四、優缺點

      優點: 

      1、在內存里只有一個實例,減少了內存的開銷,尤其是頻繁的創建和銷毀實例(比如管理學院首頁頁面緩存)。

      2、避免對資源的多重占用(比如寫文件操作)。

      缺點:

      沒有接口,不能繼承,與單一職責原則沖突,一個類應該只關心內部邏輯,而不關心外面怎么樣來實例化。

      五、實現

       單例模式的實現有多種方式

      1、線程不安全 

          public sealed class Singleton
          {
              public int Count { get; set; }
      
              private static Singleton instance = null;
      
              public static Singleton Instance
              {
                  get
                  {
                      if (instance == null)
                      {
                          instance = new Singleton();
                      }
                      return instance;
                  }
              }
      
              private Singleton()
              {
                  Count = DateTime.Now.Millisecond; 
              }
          }
      
          public class SimpleSingleton
          {
              private SimpleSingleton() { }
              public static readonly SimpleSingleton instance = new SimpleSingleton();
          }

       

      說明:SimpleSingleton是 Singleton 的簡化版,它利用.NET的特性寫的,其實和Singleton 一樣

       

      2.線程安全 

          /// <summary>
          /// 單例-線程安全
          /// </summary>
          public sealed class SafeSingleton
          {
              public int Count { get; set; }
      
              private static SafeSingleton instance = null;
      
              private static readonly object safeLock = new object();
      
              public static SafeSingleton Instance
              {
                  get
                  {
                      if (instance == null)
                      {
                          lock (safeLock)
                          {
                              if (instance == null)
                              {
                                  instance = new SafeSingleton();
                              }
                          }
                      }
                      return instance;
                  }
              }
      
              private SafeSingleton()
              {
                  Count = DateTime.Now.Millisecond;
              }
          } 

       

      3.單例測試

       

      class Program
          { 
              static void Main(string[] args)
              {
                  SayName();
                  SayNewName();
                  Thread.Sleep(1000);
              } 
      
              private static async Task SayName()
              {
                  await Task.Run(() =>
                  {
                      var s = Singleton.Instance;
                      Console.WriteLine("count:" + s.Count);
                      var s1 = SafeSingleton.Instance;
                     Console.WriteLine("【safe】 count:" + s1.Count);
                  });
              }
      
              private static async Task SayNewName()
              {
                  await Task.Run(() =>
                  {
                      var s = Singleton.Instance;
                      Console.WriteLine("new count:" + s.Count);
                      var s1 = SafeSingleton.Instance;
                      Console.WriteLine("【safe】 new count:" + s1.Count);
                  });
              }
          }

      結果

       

       4、單例模式的復用

      代碼

      /// <summary>
          /// 4、使用 C# 2.0 泛型來完成單例模式的重用
          /// </summary>
          /// <typeparam name="T"></typeparam>
          public class SingletonProvider<T> where T : new()
          {
              SingletonProvider() { }
      
              public static T Instance
              {
                  get { return SingletonCreator.instance; }
              }
      
              class SingletonCreator
              {
                  static SingletonCreator() { }
      
                  internal static readonly T instance = new T();
              }
          }
          /// <summary>
          /// 4、業務類demo
          /// </summary>
          public class TestClass
          {
              private string _createdTimestamp;
      
              public TestClass()
              {
                  _createdTimestamp = DateTime.Now.ToString();
              }
      
              public void Write()
              {
                  Console.WriteLine(_createdTimestamp);
              }
          }
          /// <summary>
          /// 4、范型單例示例
          /// </summary>
          public class demo
          {
              private void dosomething()
              {
                  SingletonProvider<TestClass>.Instance.Write();
              }
          }

       

       

       參考:

      http://www.runoob.com/design-pattern/singleton-pattern.html

      http://blog.csdn.net/dabian1987/article/details/6951652

      http://blog.csdn.net/jiankunking/article/details/50867050

       http://www.rzrgm.cn/kmsfan/p/4562323.html

       http://www.rzrgm.cn/dreign/archive/2012/05/08/2490212.html(推薦)

       

      歡迎閱讀本系列文章:Head First設計模式之目錄 

       

      posted @ 2017-08-26 09:29  心存善念  閱讀(521)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧洲性开放老太大| 久久中文字幕日韩无码视频| 久久精品无码精品免费专区| 天天爽夜夜爽人人爽曰| 日本激情久久精品人妻热| 精品亚洲欧美无人区乱码| 久久国产成人精品av| 人妻少妇精品系列一区二区| 大又大又粗又硬又爽少妇毛片| 国产亚洲综合欧美视频| 特黄aaaaaaaaa毛片免费视频 | 国产无遮挡猛进猛出免费| 亚洲色大成网站WWW国产| 极品人妻videosss人妻| 在线精品国产中文字幕| 色九月亚洲综合网| 欧美日产国产精品| 一区二区三区午夜福利院| 人妻少妇无码精品专区| 国产精品毛片无遮挡高清| 国产四虎永久免费观看| 国产偷国产偷亚洲高清人| 国产精品中文字幕免费| 色综合久久一区二区三区| 99精品久久毛片a片| 亚洲成色精品一二三区| 亚洲精品成人区在线观看| 伊人天天久大香线蕉av色| bt天堂新版中文在线| 国产精品成人一区二区不卡| 一区二区三区岛国av毛片| 久久精品国产91精品亚洲| 精品亚洲国产成人av| 精品国产中文字幕av| 免费A级毛片无码A∨蜜芽试看 | 日韩人妻无码一区二区三区综合部| 亚洲鸥美日韩精品久久| 国内自拍偷拍一区二区三区 | 人妻激情偷乱一区二区三区| 亚洲午夜理论无码电影| 激情综合色区网激情五月|