青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對現實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0

      singleton模式是Gof提出的23中模式之一,也稱為單例模式,那么簡單說一下,什么叫單例模式呢?
      通常我們創建類的對象是使用new Object(),然后就調用該對象里面的方法,那么當我們多次使用new Object()的話,會對系統資源造成一種浪費,當然.net內部已經有垃圾回收機制可以處理這種浪費。當然我們并不會再程序里面多次使用new Object(),但是,作為一個類的設計者,我們需要負什么責任,除了讓別的模塊可以調用使用之外,我們的設計還需要一種規范,這也是OO里面的規范,singleton模式在這里派上了用場。

      singleton模式的意圖:確保一個類只能擁有一個實例,并保證邏輯的正確性以及良好的效率,并提供一個該實例的全局訪問點。
      singleton模式類型:單線程singleton,多線程singleton
      singleton思路:要讓使用者只能使用一個實例的話,那么必須繞過常規的公有缺省構造器

      singleton代碼:

 1 public class singleton
 2 {
 3     private static singleton instance;
 4     private singleton() { }
 5     public static singleton Instance
 6     {
 7         get
 8         {
 9             if (instance == null)
10             {
11                 instance = new singleton();
12             }
13             return instance;
14         }
15     }
16 }
17 

      第4行:利用私有構造函數繞開系統自帶的缺省公有構造函數,這樣就使類的外部不可以直接使用new實例化對象
      第5行:提供一個靜態的公有屬性,供類外部調用
      第9行:在這里可能存在BUG,當有兩個線程同時操作公有屬性時,常規的話應該返回兩個一樣的實例,但是假如當第一個實例還未來得及創建時,第二個線程又訪問了它,顯然也會執行              new singleton()這個語句,那么這兩個對象的引用就不一樣了,可以使用object.ReferenceEquals測試一下對象的引用是否一樣。因此,給大家提供多線程方案,請看下面代碼

 1 public class singletons
 2 {
 3     private static volatile singletons instances = null;
 4     private static object lockHelper = new object(); 
 5     private singletons() { }
 6     public static singletons Instance
 7     {
 8         get
 9         {
10             if(instances==null)
11             {
12                 lock (lockHelper)
13                 {
14                     if(instances==null )
15                     {
16                         instances = new singletons();
17                     }
18                 }
19             }
20             return instances;
21         }
22     }
23 }

      顯然看起來與單線程singleton差不多,多了volatile 修飾符,還有一個Object對象,接下來跟大家解釋使用這些其中的緣由
      volatile 修飾符
      假如我定義兩個變量和兩個屬性

 1  int a;
 2  volatile int b;
 3  public int GetFirst
 4  {
 5      get { return a; }
 6  }
 7  public int GetSecond
 8  {
 9      get { return b; }
10  }

      GetFirst會得到當前線程中a的值,而多個線程就會有多個a的變量拷貝,而且這些拷貝之間可以互不相同,換句話說,另一個線程可能改變了它線程內的a值,而這個值和當前線程中的a值不相同,那么就造成線程沖突了。
那么再來看看b,因為volatile 修飾的變量不允許有不同于“主”內存區域的變量拷貝,換句話說,一個變量經volatile 修飾后在所有線程中都是同步的;任何線程改變了它的值,所以其他線程立即獲取到了相同的值,當然加了volatile 修飾的變量存儲時會比一般變量消耗的資源要多一點。

Object對象鎖
      對象鎖可以保證Lock里面的代碼只能同時讓一個線程執行,所以確保了一個對象只存在一個實例。

      同樣的需求可以有不同的方法實現,以下是另外一種實現singleton模式的代碼,代碼更簡單,不夠有缺陷,請看

1 public class singletonss
2  {
3      public static readonly singletonss Instance = new singletonss();
4      private singletonss() { }
5  }

      首先定義一個靜態的只讀實例,當然也需要私有構造器繞過缺省構造器,這樣子也可以保證多線程里也只誕生一個對象實例,因為.Net類型初始化機制保證只有一個線程執行了靜態構造器。當然這么少的代碼也可以實現singleton,但是靜態構造器不支持參數,也不能重構,因為在.Net機制里面只允許一個類擁有一個靜態構造器而且是私有的,外部不能調用只能供系統調用,所以我們不能使用參數。

本文轉自:http://www.cnblogs.com/magicchaiy/archive/2010/12/02/1894826.html
其他鏈接:http://m.shnenglu.com/dyj057/archive/2005/09/20/346.html

posted on 2012-07-13 08:14 王海光 閱讀(475) 評論(0)  編輯 收藏 引用 所屬分類: Design Pattern
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美大片在线观看一区| 亚洲承认在线| 国产精品网站一区| 亚洲精品乱码久久久久久日本蜜臀 | 久久综合网络一区二区| 欧美性一区二区| 妖精视频成人观看www| 母乳一区在线观看| 久久精品一区四区| 国产欧美日韩综合精品二区| 亚洲一区二区三区国产| 亚洲美女啪啪| 欧美日韩三级视频| 一区二区三区 在线观看视| 亚洲国产日本| 久久精品国产亚洲一区二区三区| 国产视频久久久久久久| 久久国产精品亚洲77777| 亚洲砖区区免费| 国产精品影音先锋| 久久久久久成人| 久久精品在线观看| 亚洲国产日韩欧美在线动漫| 欧美激情一区二区三区在线视频观看| 噜噜噜久久亚洲精品国产品小说| 亚洲国产高清在线| 亚洲精品欧美专区| 欧美视频二区36p| 香蕉久久夜色精品| 欧美亚洲一区三区| 亚洲国产激情| 日韩视频一区二区在线观看 | 欧美日韩a区| 99www免费人成精品| 日韩一区二区精品视频| 国产精品久久久久久久久久尿 | 99精品国产一区二区青青牛奶 | 国产精品视频久久久| 欧美在线免费看| 久久久人成影片一区二区三区观看 | 老牛嫩草一区二区三区日本| 亚洲美女在线国产| 中日韩美女免费视频网址在线观看 | 午夜激情综合网| 欧美一区二区国产| 亚洲欧洲在线观看| 亚洲私人影吧| 亚洲成色www久久网站| 夜夜夜久久久| 在线精品高清中文字幕| 9l国产精品久久久久麻豆| 国产日韩高清一区二区三区在线| 欧美韩日一区| 国产午夜精品美女视频明星a级| 欧美激情精品久久久久久黑人| 欧美亚日韩国产aⅴ精品中极品| 久久久精品tv| 国产精品chinese| 欧美aa国产视频| 国产欧美一区二区精品仙草咪 | 亚洲国产欧美一区二区三区久久| 国产精品亚洲第一区在线暖暖韩国| 蜜臀91精品一区二区三区| 欧美日韩亚洲一区二区三区四区| 久久免费观看视频| 国产精品久久久999| 亚洲二区免费| 国产欧美婷婷中文| 亚洲麻豆av| 亚洲激情成人| 久久久精品动漫| 欧美亚洲视频| 国产精品激情电影| 亚洲日本va午夜在线电影| 国产精品永久免费在线| 亚洲日产国产精品| 亚洲国产日本| 久久亚洲午夜电影| 久久免费99精品久久久久久| 国产精品视频| 亚洲欧美成人综合| 欧美日韩在线另类| 亚洲国产欧美一区二区三区丁香婷| 国产在线视频欧美| 亚洲欧美成aⅴ人在线观看| 一区二区三区 在线观看视| 欧美成人福利视频| 欧美成人蜜桃| 亚洲黄色在线视频| 欧美成人福利视频| 亚洲国产欧美一区| 一本大道久久a久久综合婷婷| 欧美成人午夜| 亚洲精品黄色| 亚洲午夜久久久| 国产精品久久久久毛片大屁完整版 | 午夜精品剧场| 国产嫩草一区二区三区在线观看| 亚洲私人影院在线观看| 午夜精品久久一牛影视| 国产精品国产三级国产aⅴ入口| 99精品免费网| 午夜精品久久久久久久久| 国产欧美一区二区三区视频| 午夜精品亚洲一区二区三区嫩草| 久久精品中文字幕一区| 国产一区视频在线观看免费| 久久久亚洲综合| 亚洲高清一区二区三区| 一区电影在线观看| 国产精品每日更新在线播放网址| 亚洲永久字幕| 久久在线视频在线| 亚洲欧洲另类国产综合| 欧美日韩免费观看一区| 亚洲免费在线播放| 久久国产精品毛片| 亚洲激情不卡| 国产精品免费网站| 久久欧美中文字幕| 日韩网站免费观看| 欧美在线观看一区二区| 亚洲电影观看| 欧美日韩免费一区二区三区视频| 亚洲欧美文学| 欧美黄色成人网| 亚洲一二三四久久| 国内久久精品| 欧美日韩激情小视频| 午夜精品久久| 亚洲国产日韩在线一区模特| 午夜精品久久久久| 亚洲区一区二| 国产精品稀缺呦系列在线| 模特精品裸拍一区| 亚洲欧美日本国产专区一区| 欧美va亚洲va香蕉在线| 亚洲综合精品一区二区| 韩日欧美一区二区三区| 欧美日韩国产va另类| 久久国产精品电影| 洋洋av久久久久久久一区| 免费成人高清| 欧美一区视频| 在线亚洲欧美| 最新热久久免费视频| 国产日韩一区二区三区在线| 欧美精品一区在线观看| 欧美日韩日本国产亚洲在线| 亚洲另类一区二区| 欧美一区二区精美| 亚洲精品日韩综合观看成人91| 国产精品拍天天在线| 牛牛国产精品| 久久国产主播| 亚洲欧美激情一区| 一区二区三区欧美在线观看| 亚洲国产精品成人一区二区| 久久久久久亚洲精品不卡4k岛国| 亚洲午夜激情网页| 亚洲精选久久| 1024成人网色www| 国产日韩欧美制服另类| 欧美乱在线观看| 欧美成人午夜激情| 蜜臀av一级做a爰片久久| 午夜精品区一区二区三| 宅男精品视频| 亚洲美女黄色| 91久久精品国产91性色| 亚洲第一黄网| 免费在线一区二区| 久久久精品日韩欧美| 午夜宅男久久久| 亚洲一区二区三区影院| 中国成人黄色视屏| 一区二区三区福利| 一本色道**综合亚洲精品蜜桃冫 | 国产精品magnet| 欧美日韩www| 欧美精品福利视频| 欧美成人一区二区三区| 久久一综合视频| 久久亚洲一区二区| 另类欧美日韩国产在线| 久久se精品一区二区| 亚洲欧美日韩在线综合| 亚洲一区美女视频在线观看免费| 国产精品99久久不卡二区| 日韩视频在线永久播放| 野花国产精品入口| 亚洲小视频在线| 亚洲性视频h| 亚洲女人天堂成人av在线| 亚洲一级在线观看| 欧美亚洲视频一区二区| 久久夜色精品国产欧美乱极品| 久久在线精品| 欧美精品乱人伦久久久久久 | 亚洲国产日韩欧美综合久久|