C# 程式設計經典300例 實例093 果園噴洒殺蟲劑 單例模式

       實例093的範例貼切,用一架直升機噴洒農藥的範例讓讀者了解單例模式。


實例描述


      範例以果園噴洒殺蟲劑介紹單例模式的用法。北京與上海都有果園,一架直升機往返兩地噴洒殺蟲劑。單例模式使直升機實例全局唯一。


輸出「為北京的果園噴洒殺蟲劑」、「殺蟲劑還剩50噸」、「為上海的果園噴洒殺蟲劑」與「殺蟲劑已用完」字串


實現過程


class Helicopter


{


   static Helicopter helicopter;


   public static Helicopter Instance


   {


       get


       {


           if(helicopter == null)


               helicopter = new Helicopter(); //延遲創建直升機的實例


           return helicopter;


       }


   }


   protected Helicopter() {}


   int insecticide = 100;


   public void SprayInsecticide(string city)


   {


       this.insecticide -= 50;


       Console.WriteLine(“為{0}的果園噴洒殺蟲劑! ”, city);


       if( this.insecticide == 0)


           Console.WriteLine(“殺蟲劑已用完! ”);


       else


           Console.WriteLine(“殺蟲劑還剩{0}噸! ”, this.insecticide);


   }


}


 


main函數代碼如下:


 


Helicopter bjHelicopter = Helicopter.Instance;


bjHelicopter.SprayInsecticide(“北京”);


Helicopter shHelicopter = Helicopter.Instance;


shHelicopter.SprayInsecticide(“上海”);


 


代碼解析


 


Helicopter 類別有一個私有靜態變數helicopter 和一個Helicopter 類型的公有屬性Instance,helicopter 用來保存Helicopter 的全局唯一實例。


 


第一次獲取Instance屬性時實現了對Helicopter 類別的實例化,並將實例賦值給singleton變量,再次獲取Instance的時候,依然會返回singleton變量。這樣永遠調用唯一的Singleton實例,實現了單例模式。


 


從輸出結果可看出北京直升機與上海直升機是同一個實例,北京噴洒殺蟲劑之後,再到上海噴洒殺蟲劑會用完殺蟲劑。


 


單例模式主要實現對自身實例的創建,實例是全局唯一,並向全局提供實例的介面。


 


單例模式的好處在於將實例創建的過程延遲到調用實例的時候,實現了延遲加載。


 


 


留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我