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實例,實現了單例模式。
從輸出結果可看出北京直升機與上海直升機是同一個實例,北京噴洒殺蟲劑之後,再到上海噴洒殺蟲劑會用完殺蟲劑。
單例模式主要實現對自身實例的創建,實例是全局唯一,並向全局提供實例的介面。
單例模式的好處在於將實例創建的過程延遲到調用實例的時候,實現了延遲加載。
留言
張貼留言