專業課《軟件設計模式》學了好幾周,完全還沒進入狀態,還停留在上半學期的php中。這幾天溫習了下c#,準備好好自學下軟件設計模式,不然期末要掛呀。
Day one: 簡單工廠模式
類圖:
以上內容摘抄於百度百科對於簡單工廠模式的介紹,但每次看到這些介紹,那可是個頭痛啊,結合書本以及網上資料自己簡單總結了一下:
優點:簡單工廠模式將對象的創建和對象本身的處理分離開來,降低了系統的耦合度,便於修改;
在有所需求時,只需傳入正確的參數,通過工廠類實例化出合適的對象
缺點:違反高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中,它所創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類。
實例:簡單電視機工廠
某電視機廠專爲各知名電視機品牌代工生產各類電視機,當需要海爾牌電視機時只需要在調用該工廠的工廠方法時傳入參數“Haier”,需要海信電視機時只需要傳入參數“Hisense”,工廠可以根據傳入的不同參數返回不同品牌的電視機。現使用簡單工廠模式來模擬該電視機工廠的生產過程。
抽象產品類TV
包含了所有產品都具有的業務方法play()
public class TV
{
public virtual void play()
{
}
}
具體產品類 HaierTV
繼承於TV是抽象產品TV的子類,實現了TV中的業務方法play()
class HaierTV :TV
{
public override void play()
{
Console.WriteLine("HaierTV playing--");
}
}
具體產品類 HisenseTV
繼承於TV是抽象產品TV的子類,實現了TV中的業務方法play(),不同的具體產品,play()方法不同
class HisenseTV : TV
{
public override void play()
{
Console.WriteLine("HisenseTV playing--");
}
}
工廠類TVFcatory
工廠類,整個產品的核心,提供了靜態工廠方法produceTV(),根據參數值得不同實例化具體產品,返回相應對象。
public class TVFactory
{
public static TV produceTV(String brand)
{
TV tv = null;
if (brand == "Haier")
{
Console.WriteLine("電視機工廠生產海爾電視機!");
tv = new HaierTV();
}
else if (brand == "Hissense")
{
Console.WriteLine("電視機工廠生產海信電視機!");
tv = new HisenseTV();
}
else
{
throw new ArgumentOutOfRangeException("暫不能生產該品牌電視機!");
}
return tv;
}
}
客戶端代碼
class Program
{
static void Main(string[] args)
{
TV tv1;
tv1 = TVFactory.produceTV("Haier");
tv1.play();
Console.ReadKey();
}
}
總結:對面向對象的特性,有了進一步的瞭解。但還是不能夠很熟練的運用,需要更多地總結、熟悉吧。每天熟悉一個模式,在期末考試之前做到熟練掌握!加油啊!考試月,各個課程都要上心,將壓力轉化爲動力。Go Go Go!
2016.12.12