2016.12.12 學習日記-簡單工廠模式

      專業課《軟件設計模式》學了好幾周,完全還沒進入狀態,還停留在上半學期的php中。這幾天溫習了下c#,準備好好自學下軟件設計模式,不然期末要掛呀驚恐快哭了

Day one: 簡單工廠模式


     簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。
     該模式中包含的角色及其職責
    工廠(Creator)角色
    簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象。
    抽象產品(Product)角色
    簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
    具體產品(Concrete Product)角色
    是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。
類圖:

   (引自百度百科)


以上內容摘抄於百度百科對於簡單工廠模式的介紹,但每次看到這些介紹,那可是個頭痛啊,結合書本以及網上資料自己簡單總結了一下:

優點:簡單工廠模式將對象的創建和對象本身的處理分離開來,降低了系統的耦合度,便於修改;

在有所需求時,只需傳入正確的參數,通過工廠類實例化出合適的對象

缺點:違反高內聚責任分配原則,將全部創建邏輯集中到了一個工廠類中,它所創建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類。


實例:簡單電視機工廠

某電視機廠專爲各知名電視機品牌代工生產各類電視機,當需要海爾牌電視機時只需要在調用該工廠的工廠方法時傳入參數“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



發佈了36 篇原創文章 · 獲贊 2 · 訪問量 9988
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章