乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【新提醒】設(shè)計(jì)模式之一:單例模式

       kiki的號(hào) 2017-02-20

           單例模式(Singleton Pattern):
           定義:Ensure a class has only instance , and provide a global point of access to it.(確保某一個(gè)類只有一個(gè)實(shí)例,而且自動(dòng)實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例)
           優(yōu)點(diǎn):
           1、在內(nèi)存中只有一個(gè)實(shí)例,所以減少了內(nèi)存開銷,特別是在一個(gè)對(duì)象需要頻繁地創(chuàng)建、銷毀時(shí),而且創(chuàng)建或銷毀時(shí)性能又無法優(yōu)化。單例模式的優(yōu)勢(shì)非常明顯;
           2、避免對(duì)資源的多重占用。例如寫文件動(dòng)作,由于只有個(gè)實(shí)例存在內(nèi)存中,避免對(duì)同一個(gè)資源文件的同時(shí)寫操作
           3、提供了對(duì)唯一實(shí)例的受控訪問。
           4、允許可變數(shù)目的實(shí)例。
          缺點(diǎn):
          1、沒有接口,擴(kuò)展困難。
          2、不適用于變化的對(duì)象,如果同一類型的對(duì)象總是要在不同的用例場景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤,不能保存彼此的狀態(tài)。
          3、濫用單例將帶來一些負(fù)面問題,如為了節(jié)省資源將數(shù)據(jù)庫連接池對(duì)象設(shè)計(jì)為的單例類,可能會(huì)導(dǎo)致共享連接池對(duì)象的程序過多而出現(xiàn)連接池溢出;如果實(shí)例化的對(duì)象長時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收,這將導(dǎo)致對(duì)象狀態(tài)的丟失。
          4、單例類的職責(zé)過重,在一定程度上違背了“單一職責(zé)原則”。
        
          適用場景:
          1、資源共享的情況下,避免由于資源操作時(shí)導(dǎo)致的性能或損耗等。如上述中的日志文件,應(yīng)用配置。
          2、控制資源的情況下,方便資源之間的互相通信。如線程池等。
          3、需要定義大量的靜態(tài)常量和靜態(tài)方法(如工具類)的環(huán)境,可以采用單例模式
         
         UML圖:
           單例模式的幾種書寫方式:
           1.餓漢式單例:單例實(shí)例在類裝載時(shí)就構(gòu)建  ,
           特點(diǎn):線程安全   在類加載的同時(shí)已經(jīng)創(chuàng)建好一個(gè)靜態(tài)對(duì)象,調(diào)用時(shí)反應(yīng)速度快
           
      [AppleScript] 純文本查看 復(fù)制代碼
      01
      02
      03
      04
      05
      06
      07
      08
      09
      10
      11
      12
      public class SingletonPattern()[/font][/color]    {
              private static SingletonPattern singleton  = new SingletonPattern();
               
              private SingletonPattern()
              {
              }
              //通過該方法獲得實(shí)例對(duì)象
              public static SingletonPattern GetSingleton()
              {
                   return singleton;
              }
          }
           2、懶漢式單例:單例實(shí)例在第一次被使用時(shí)構(gòu)建,延遲初始化
           特點(diǎn):    避免了餓漢式的那種在沒有用到的情況下創(chuàng)建事例,資源利用率高,不執(zhí)行g(shù)etInstance()就不會(huì)被實(shí)例,可以執(zhí)行該類的其他靜態(tài)方法。但是多個(gè)線程判斷instance都為null時(shí),在執(zhí)行new操作時(shí)多線程會(huì)出現(xiàn)重復(fù)情況
      [AppleScript] 純文本查看 復(fù)制代碼
      01
      02
      03
      04
      05
      06
      07
      08
      09
      10
      11
      12
      13
      14
      15
      16
      17
      18
      public class SingletonPattern()
         {
             private static SingletonPattern singleton  = null;
              
             private SingletonPattern()
             {
             }
             //通過該方法獲得實(shí)例對(duì)象
             public static SingletonPattern GetSingleton()
             {
                 if(singleton == null)
                 {
                     //多個(gè)線程判斷instance都為null時(shí),在執(zhí)行new操作時(shí)多線程會(huì)出現(xiàn)重復(fù)情況
                     singleton = new SingletonPattern ();
                 }
                  return singleton;
             }
         }
          3、雙重檢測單例:
          特點(diǎn): 資源利用率高,不執(zhí)行g(shù)etInstance()就不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法 但是第一次加載時(shí)反應(yīng)不快
      [AppleScript] 純文本查看 復(fù)制代碼
      01
      02
      03
      04
      05
      06
      07
      08
      09
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      public class SingletonPattern()
          {
              private static SingletonPattern singleton  = null;
               
              private SingletonPattern()
              {
              }
              //通過該方法獲得實(shí)例對(duì)象
              public static SingletonPattern GetSingleton()
              {
                  if(singleton == null)
                  {
                      //使用synchronized關(guān)鍵字,防止多個(gè)線程判斷instance都為null時(shí),在執(zhí)行new操作時(shí)多線程會(huì)出現(xiàn)重復(fù)情況
                      synchronized (SingletonPattern.class) {
                                      if (instance == null) {
                                              instance = new SingletonPattern();
                                      }
                              }
                  }
                   return singleton;
              }
          }
         4、靜態(tài)內(nèi)部類模式:
      [AppleScript] 純文本查看 復(fù)制代碼
      01
      02
      03
      04
      05
      06
      07
      08
      09
      10
      11
      12
      13
      14
      15
      16
      17
      18
      public class SingletonPattern()
          {
               
              private SingletonPattern()
              {
              }
              private static class SingletonHelp()
              {
                  static  SingletonPattern singleton = new SingletonPattern();
              }
              //通過該方法獲得實(shí)例對(duì)象
              public static SingletonPattern GetSingleton()
              {
           
                   return singleton;
              }
          }

          好了,這一章就寫到這,歡迎大家加入QQ群:280993838 。或者關(guān)注我的公眾號(hào):

         

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多