日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)其它知識 → 系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式-單件模式

      系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式-單件模式

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時間:2010/10/3 19:08:52字體大。A-A+

      作者:佚名點(diǎn)擊:85次評論:0次標(biāo)簽: 架構(gòu)

      • 類型:電子教程大。23.1M語言:中文 評分:10.0
      • 標(biāo)簽:
      立即下載

      1、開篇

             其實(shí)咱本來不是籌劃把體系架構(gòu)中的1些計(jì)劃模式單獨(dú)抽出來講授的,因?yàn)樵S多的好朋友也比力關(guān)注這方面的內(nèi)容,以是咱想議決咱明白及通常項(xiàng)目中應(yīng)用到的1

      些常見的計(jì)劃模式,拿出來給各人做個簡略講授,咱這里只是拋磚引玉,要是某個地方講授的不精確大概不細(xì)致,請各品德評指出。園子內(nèi)里的許多的大牛寫的計(jì)劃模式

      都特別的經(jīng)典,咱這里寫大概有點(diǎn)布鼓雷門的以為,不外咱還是決定把它寫出來,盼望能對初學(xué)者有肯定的資助與引導(dǎo)的作用。即使咱這里要是講某個地方表明的有問

      題大概講是某個地方寫的不切合邏輯之處,還請各人多多指出,提著名貴意見。

             軟件項(xiàng)目中其實(shí)有許多總結(jié)性的話語,好比講軟件=算法 數(shù)據(jù)布局等等這樣的形貌,即使咱們這里大概算法便是泛指1些軟件中的編程要領(lǐng)了,計(jì)劃模式如何去

      明白呢?為什么要有計(jì)劃模式?它能帶來什么?等等這些都是咱們必要討論的問題。首先咱們必要了解計(jì)劃模式能帶來什么。大概這才是咱們學(xué)習(xí)它的緊張緣故原由,要是

      講不能為咱們在謄寫軟件的進(jìn)程中帶來更方面的利益,那咱們也不會利用與學(xué)習(xí)它。

             計(jì)劃模式是什么?

             計(jì)劃模式能簡略的明白為辦理某1系列問題的完善的辦理方案。咱們在軟件開辟的進(jìn)程中每每遇到計(jì)劃成果實(shí)現(xiàn)的問題,而計(jì)劃模式正是為相識決軟件計(jì)劃成果

      實(shí)現(xiàn)時遇到的某1類問題的辦理方案。因?yàn)?樣平常環(huán)境下來講,咱們在某個軟件成果的開辟進(jìn)程中遇到的成果計(jì)劃問題,大概是古人很早就遇到過的問題,以是議決這種

      計(jì)劃模式的要領(lǐng)來辦理,能讓咱們在軟件實(shí)現(xiàn)的進(jìn)程中少走彎路,大概講是給咱們的軟件計(jì)劃帶來很好的機(jī)動性與順應(yīng)性。

             計(jì)劃模式帶來了什么?

             計(jì)劃模式是源于實(shí)踐,并且每種計(jì)劃模式都包羅了1個問題形貌,問題涉及到的加入者并且提供了1個實(shí)際的辦理方案。計(jì)劃模式的利益咱們能議決下圖來簡略

      闡明:

             image 即使咱這里大概總結(jié)還不完全,還請各人增補(bǔ),咱會加載這內(nèi)里的內(nèi)容。即使設(shè)

      計(jì)模式帶來了這么多的利益,以是咱們學(xué)習(xí)計(jì)劃模式就顯得比力須要了,也是從事軟件開辟及計(jì)劃必需掌控的根本技能之1。

             計(jì)劃模式的簡略分類:

             image 即使這里能簡略的分為這3大類,下面咱們在報告的進(jìn)程中將會分別講授,即使咱這里所以創(chuàng)建型模

      式開始講授,咱想創(chuàng)建型模式也是各人項(xiàng)目中必備的吧?下面咱就從創(chuàng)建型模式先來講授。

      2、擇要

             本文將緊張講授創(chuàng)建型模式中的單例模式先來講授,因?yàn)閱卫J绞亲詈喡砸彩亲钊菀酌靼椎挠?jì)劃模式,上手快,易利用的計(jì)劃模式。本文將從下面的流程來講授

      單例模式,背面報告的計(jì)劃模式也將利用這樣的要領(lǐng)。

             1、什么是單例模式?

             2、單例模式的應(yīng)用場景。

             3、舉例闡明單例模式的利用。

             4、總結(jié)單例模式的用法。

      3、本文大綱

             a、開篇。

             b、擇要。

             c、本文大綱。

             d、單例模式的劇情。

             e、相干應(yīng)用場景分析。

             f、本文總結(jié)。

             g、系列進(jìn)度。

             h、下篇預(yù)告。

      4、單例模式的劇情

             本章咱們將來報告下單例模式的利用,首先咱們來看看單例模式的定義:

             單例模式:是1種軟件計(jì)劃中經(jīng)常使用的計(jì)劃模式,緊張是用來控制某個類必需在某個應(yīng)用步調(diào)中只能有1個實(shí)例存在。

             偶然候咱們必要確保整個體系中只有某個類的1個實(shí)例存在,這樣有利于咱們與諧控制體系的舉動。比方:咱們在某個體系中利用了發(fā)送短信的這樣的辦事,那么

      咱們大概盼望議決單1的短信辦事類的實(shí)例,而不是多個東西實(shí)例完成短信的發(fā)送辦事。此時咱們能議決單例模式來完成。

             image 上圖簡略形貌了單例模式應(yīng)用的位置。

              咱們看看單例模式的幾種實(shí)現(xiàn)要領(lǐng):

              image

              下面咱們來舉例闡明下這2種要領(lǐng)的實(shí)現(xiàn)。

              1、外部控制的要領(lǐng)

       

      view source
      print?
      01 public class Instance 
      02
      03     private List<SendMessage> lists = new List<SendMessage>(); 
      04     private SendMessage sendInstance; 
      05  
      06     public SendMessage SInstance 
      07     { 
      08         get 
      09         { 
      10             return sendInstance; 
      11         } 
      12     } 
      13  
      14     public void InstanceMethod() 
      15     { 
      16         if (lists.Count == 0) 
      17         { 
      18             sendInstance = new SendMessage(); 
      19             lists.Add(sendInstance); 
      20         } 
      21         else 
      22         { 
      23             sendInstance = lists[0]; 
      24         } 
      25     } 
      26 }

             2、內(nèi)部控制要領(lǐng)

       

      view source
      print?
      01 public class Instance1 
      02  { 
      03     private static SendMessage sendInstance; 
      04     private static object _lock = new object(); 
      05  
      06     protected Instance1() 
      07     { 
      08     } 
      09  
      10     public static SendMessage SInstance 
      11     { 
      12         get 
      13         { 
      14             lock (_lock) 
      15             { 
      16                 if (sendInstance == null) 
      17                     sendInstance = new SendMessage(); 
      18                 return sendInstance; 
      19             } 
      20         } 
      21     } 
      22 }

              這里有幾點(diǎn)必要過細(xì)的地方,對付第2種要領(lǐng)有幾個地方必要闡明下,首先是要控制全局只有1個實(shí)例的類,請定義成靜態(tài)實(shí)例,如允許以確保只有1個實(shí)例對

      象,其次,這個東西的布局函數(shù)請聲明成掩護(hù)范例的成員,如允許以屏蔽議決直接實(shí)例化的情勢來訪問。議決這樣的情勢,客戶能不必要了解某個單例實(shí)例東西的內(nèi)

      部實(shí)現(xiàn)細(xì)節(jié)。1樣平常環(huán)境下饜足上面的2點(diǎn)需要就能完成全局唯1訪問入口的控制。即使大概在多線程的環(huán)境下接納這樣的情勢還會有肯定的毛病,即使咱們這里也簡略

      的講授下相應(yīng)的控制方案。方案如下:

                 

      view source
      print?
      1 public class CoolInstance 
      2
      3     private CoolInstance() 
      4     { 
      5     } 
      6     public static readonly CoolInstance Instance = new CoolInstance(); 
      7 }
          

             看吧很簡略吧,即使咱們這里來簡略表明下原理:

             1、咱們先把布局函數(shù)聲明為私有的布局函數(shù),這樣咱們能大概屏蔽外部議決實(shí)例化的情勢訪問內(nèi)部的成員函數(shù)。全部的成員函數(shù)的訪問必需議決靜態(tài)成員Instance

      來完成訪問。

             2、這段代碼議決定義大眾、靜態(tài)、只讀的成員相當(dāng)于在類被第1次利用時實(shí)行布局,因?yàn)槭侵蛔x的,以是1旦布局后不容許修正,就不用擔(dān)心不寧靜的問題。

              信賴對上面的介紹各人應(yīng)該根本上了解單例模式的應(yīng)用了,那么下面咱們來看看項(xiàng)目中的實(shí)際應(yīng)用場景及用法。

      5、相干應(yīng)用場景講授

              1、場景短信及郵件發(fā)送辦事

              那么咱們將接納上面介紹的最“COOL”的要領(lǐng)來舉行控制,提供發(fā)送短信及發(fā)送郵件的辦事。

       

      view source
      print?
      01 public class CoolInstance 
      02
      03     private CoolInstance() 
      04     { 
      05     } 
      06  
      07     public static readonly CoolInstance Instance = new CoolInstance(); 
      08  
      09     /// <summary> 
      10     /// 發(fā)送手機(jī)短信 
      11     /// </summary> 
      12     public bool SendMessage(string telNumber,string content) 
      13     { 
      14         return true; 
      15     } 
      16  
      17     /// <summary> 
      18     /// 發(fā)送郵件 
      19     /// </summary> 
      20     /// <param name="content"></param> 
      21     /// <param name="toMail"></param> 
      22     public bool SendMail(string content,string toMail) 
      23     { 
      24         return true; 
      25     } 
      26 }

              咱們再來看看調(diào)用類中怎樣謄寫完成調(diào)用。比方咱們有個訂單類,當(dāng)有人新下訂單時,將給賣家發(fā)送短信提示成果。

               

      view source
      print?
      01 /// <summary> 
      02  /// 訂單業(yè)務(wù) 
      03 /// </summary> 
      04 public class Order 
      05
      06     public int Save() 
      07     { 
      08         //先是將訂單的相干資訊生成, 
      09         this.InitOrderInfo(); 
      10  
      11         //實(shí)行訂單的長期化要領(lǐng) 
      12         int count= this.Add(); 
      13  
      14         //發(fā)送短信 
      15         CoolInstance.Instance.SendMessage(string.Empty, string.Empty); 
      16         //發(fā)送郵件 
      17         CoolInstance.Instance.SendMail(string.Empty, string.Empty); 
      18  
      19         return count; 
      20     } 
      21  
      22     /// <summary> 
      23     /// 初始化訂單資訊 
      24     /// </summary> 
      25     private void InitOrderInfo() 
      26     { 
      27     } 
      28  
      29     /// <summary> 
      30     /// 新增訂單資訊 
      31     /// </summary> 
      32     /// <returns></returns> 
      33     private int Add() 
      34     { 
      35         return 0; 
      36     } 
      37 }
             

              這樣咱們就完成了短信發(fā)送辦事及郵件發(fā)送辦事的控制。緊張還是根據(jù)本身的業(yè)務(wù)必要。

              2、比方咱們現(xiàn)在提供1個體系日志辦事大概打印大概掃描的辦事,咱們盼望全局只有1個訪問入口,那么咱們就能議決這樣的單例模式來實(shí)現(xiàn)這樣的需要。

       

      view source
      print?
      01 public class PrintHelper 
      02  { 
      03      #region 布局函數(shù) 
      04      private PrintHelper() 
      05      { 
      06      } 
      07  
      08      public static readonly PrintHelper Instance = new PrintHelper(); 
      09      #endregion 
      10  
      11      #region 打印辦事 
      12  
      13      /// <summary> 
      14      /// 直接打印辦事 
      15      /// </summary> 
      16      /// <returns></returns> 
      17      public bool Print() 
      18      { 
      19          return true; 
      20      } 
      21  
      22      /// <summary> 
      23      /// 打印預(yù)覽 
      24      /// </summary> 
      25      /// <returns></returns> 
      26      public bool PrintPreview() 
      27      { 
      28          return true; 
      29      } 
      30  
      31      #endregion 
      32  }

              具體的調(diào)用類咱就不寫相應(yīng)的代碼,都與上面的情勢類同,下面咱們講授下大概更特別的需要,偶然候咱們大概必要加載咱們創(chuàng)建的唯1實(shí)例,此時咱們怎樣控

      制單例實(shí)例東西的加載呢,偶然候大概咱們有這樣的需要。下面咱們來看看怎樣實(shí)現(xiàn)這樣的需要。

              3、可加載單例東西的場景

              首先咱們先講下什么環(huán)境下會遇到這樣的加載要領(lǐng)呢?比方咱們想在單例模式的類的布局函數(shù)是帶有肯定參數(shù)的環(huán)境時:

       

      view source
      print?
      01 public class UpdateHelper 
      02
      03     private string type = string.Empty; 
      04     private static object _lock = new object(); 
      05     private static UpdateHelper instance; 
      06     private UpdateHelper(string valueType) 
      07     { 
      08         type = valueType; 
      09     } 
      10  
      11     public static UpdateHelper Instance 
      12     { 
      13         get 
      14         { 
      15             lock (_lock) 
      16             { 
      17                 if (instance == null) 
      18                 { 
      19                     //要是這里有多個條件需要的話,大概寫起來會比力龐大,那么有更好的要領(lǐng)來處理懲罰嗎? 
      20                     instance = new UpdateHelper("test!"); 
      21                 } 
      22  
      23                 return instance; 
      24             } 
      25         } 
      26     } 
      27 }

              那么咱們來分析幾種步伐,有沒有更好的步伐來處理懲罰呢?

              1、首先咱們不能手動實(shí)例化,以是咱們沒有步伐動態(tài)傳入布局函數(shù)參數(shù),只能在類的內(nèi)部指定這個參數(shù),不過偶然候咱們必要動態(tài)的加載這個參數(shù),那么這樣的

      情勢顯然就沒有步伐實(shí)現(xiàn)。

              2、議決屬性的要領(lǐng),來動態(tài)的設(shè)置屬性的內(nèi)容來完成輸出參數(shù)的變化,不過這樣的要領(lǐng)大概太甚自由,無法饜足單例模式的初衷。

              3、接口要領(lǐng),因?yàn)榻涌诒匦枰款悂韺?shí)現(xiàn),以是更不靠譜,能不思量這樣的要領(lǐng)。

              4、議決Attribute的要領(lǐng)來將資訊動態(tài)的注入到布局函數(shù)中,不過如何講這樣的要領(lǐng)是不是太發(fā)兵動眾了呢?終究單例模式本來便是很簡略的。

              5、議決配置文檔,議決config文檔配置節(jié)點(diǎn)的情勢來動態(tài)的配置相干資訊,實(shí)現(xiàn)加載實(shí)例東西內(nèi)容的環(huán)境。

              議決上面的5種環(huán)境的分析,那么議決2、4、5能實(shí)現(xiàn)這個需求,不過比擬相應(yīng)的價格來講,5的要領(lǐng)是最機(jī)動也是最切合單例模式本來的范例需求,相對來講

      成本與價格也能汲取。

       

      view source
      print?
      1 <?xml version="1.0" encoding="utf-8" ?> 
      2 <configuration> 
      3   <system.Web> 
      4     <add key="ssss" >value</add> 
      5   
      6   </system.Web> 
      7 </configuration>

       

               那么咱們上面的單力模型中的代碼只必要稍微的變革下即可,請看如下代碼:

       

      view source
      print?
      01 public class UpdateHelper 
      02
      03     private string type = string.Empty; 
      04     private static object _lock = new object(); 
      05     private static UpdateHelper instance; 
      06     private UpdateHelper(string valueType) 
      07     { 
      08         type = valueType; 
      09     } 
      10  
      11     public static UpdateHelper Instance 
      12     { 
      13         get 
      14         { 
      15             lock (_lock) 
      16             { 
      17                 if (instance == null) 
      18                 { 
      19                     //要是這里有多個條件需要的話,大概寫起來會比力龐大,那么有更好的要領(lǐng)來處理懲罰嗎? 
      20                     instance = new UpdateHelper(System.Configuration.ConfigurationManager.AppSettings["ssss"].ToString()); 
      21                 } 
      22  
      23                 return instance; 
      24             } 
      25         } 
      26     } 
      27 }

              咱想到這里各人都對單例模式有個簡略的了解了,本文的內(nèi)容就講到這里。咱們來回顧下咱們報告的內(nèi)容:

              image

      6、本文總結(jié)

              本文緊張報告了創(chuàng)建型模式中的單例模式,單例模式緊張是用來控制體系中的某個類的實(shí)例的數(shù)量及全局的訪問入口點(diǎn)。咱們緊張報告了實(shí)現(xiàn)單例模式的要領(lǐng),

      分為外部要領(lǐng)及內(nèi)部要領(lǐng),即使咱們現(xiàn)在接納的要領(lǐng)都是內(nèi)部要領(lǐng),還報告了線程寧靜的單例模式及帶有參數(shù)的布局函數(shù)的環(huán)境,根據(jù)配置文檔來實(shí)現(xiàn)參數(shù)值的動態(tài)配

      置的環(huán)境。盼望本文的講授能對不熟習(xí)計(jì)劃模式的同仁能大概相識了解單例模式的應(yīng)用,而對已熟知單例模式的同仁能溫故而知新,咱會開心寫好這個系列,即使咱這

      里大概在大牛的面前大概是布鼓雷門吧,不外咱會連續(xù)開心,奪取寫出讓各人1看就明確的計(jì)劃模式系列。本文錯誤之處再所難免,還請各品德評之處,咱會連續(xù)改

      進(jìn)。

      7、系列進(jìn)度

              創(chuàng)建型

              1、體系架構(gòu)技能之計(jì)劃模式-單件模式

              2、體系架構(gòu)技能之計(jì)劃模式-工廠模式

              3、體系架構(gòu)技能之計(jì)劃模式-抽象工廠模式

              4、體系架構(gòu)技能之計(jì)劃模式-創(chuàng)建者模式

              5、體系架構(gòu)技能之計(jì)劃模式-原型模式

              布局型

              1、體系架構(gòu)技能之計(jì)劃模式-組合模式

              2、體系架構(gòu)技能之計(jì)劃模式-表面模式

              3、體系架構(gòu)技能之計(jì)劃模式-適配器模式

              4、體系架構(gòu)技能之計(jì)劃模式-橋模式

              5、體系架構(gòu)技能之計(jì)劃模式-裝飾模式

              6、體系架構(gòu)技能之計(jì)劃模式-享元模式

              7、體系架構(gòu)技能之計(jì)劃模式-署理模式

              舉動型

              1、體系架構(gòu)技能之計(jì)劃模式-下令模式

              2、體系架構(gòu)技能之計(jì)劃模式-觀察者模式

              3、體系架構(gòu)技能之計(jì)劃模式-戰(zhàn)略模式

              4、體系架構(gòu)技能之計(jì)劃模式-職責(zé)模式

              5、體系架構(gòu)技能之計(jì)劃模式-模板模式

              6、體系架構(gòu)技能之計(jì)劃模式-中介者模式

              7、體系架構(gòu)技能之計(jì)劃模式-表明器模式

      8、下篇預(yù)告

              下篇咱們將會介紹咱們各人最熟知的項(xiàng)目模式,即使咱會更多的聯(lián)合實(shí)例來講授每個計(jì)劃模式的應(yīng)用場景及具體的實(shí)例,來更清楚的形貌什么環(huán)境下用什么模

      式,及每個模式之間的區(qū)別。各人的支持便是咱謄寫的動力,盼望各人多多支持咱吧!

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)