設計模式-簡單工廠模式

張龍豪發表於2014-08-15

前言

點選檢視設計模式系列

設計模式的23種中,並沒有簡單工廠模式,然而大家都有寫簡單工廠模式,寫他的真實目的在於循序漸進理解後續的工廠模式,工廠方法,抽象工廠,也就是對工廠這個名詞做個理解。

簡單工廠模式

簡單工廠模式就是通過提供的資料,進入工廠類決策出,具體例項化那個類,在例項化的類中進行程式操作,然後返回可能被例項化類的公共基類,從基類中獲取你想要的結果。

舉例:如今看病,猶如部件在工廠加工,怎麼說呢?打個比方,你去看男科,然而醫院有好多課室,你現在進醫院之後會迎面走來1個護士,先檢測你是男的女的或是什麼情況,然後再帶你去屬於你的科室。

分析:這個迎面走來的這個護士:就是你首先選擇科室的決策者,因為他從你的描述中知道你的一些祕密,作為工廠方法。然而各個可是都屬於不同的物件等待你的到來,給你看病。各個科室的基類是醫院。等你看完病後,這個醫院會給你一個診斷治療的說法。

基類程式碼:

     //醫院
     public class Room
    {
         //男科護士,婦科忽視說的內容
         protected string boyRoomSay, grilRoomSay;

         //返回男科忽視說的話
         public string getBoyRoom()
         {
             return boyRoomSay;
         }

         //返回婦科護士說的話
         public string getGrilRoom()
         {
             return grilRoomSay;
         }
    }

子類程式碼:根據自身的特性,會讓不同的護士給你一種合理的說法

    //男科
     public class boyRoom : Room
     {
         public boyRoom(string sex)
         {
             if (sex == "")
             {
                 boyRoomSay = "歡迎進入男課室";
                 grilRoomSay = "呵呵,你不能來婦科看的。";
             }
             else
             {
                 boyRoomSay = "請問您是男是女!";
                 grilRoomSay = "請問您是男是女!";
             }
         }
     }
     //婦科
     public class grilRoom : Room
     {
         public grilRoom(string sex)
         {
             if (sex == "")
             {
                 grilRoomSay = "歡迎進入婦課";
                 boyRoomSay = "呵呵,你不能來男科看的。";
             }
             else
             {
                 boyRoomSay = "請問您是男是女!";
                 grilRoomSay = "請問您是男是女!";
             }
         }
     }

工廠:給你決策去哪裡的小護士

     //構建工廠
     public class RoomFactory
     {
         public RoomFactory() { }
         //工廠中的決策者,給我一個引數,我說給你那個例項
         public Room getRoom(string sex)
         {
             if (sex=="")
             {
                 return new boyRoom(sex);
             }
             else
             {
                 return new grilRoom(sex);
             }
         }

     }

執行:

 public static void Main(string[] args)
        {
            Console.WriteLine("請問您性別是:");
//獲取你輸入的性別
string str = Console.ReadLine(); RoomFactory fac = new RoomFactory(); Room rom = fac.getRoom(str); Console.WriteLine("男科護士:" + rom.getBoyRoom()); Console.WriteLine("婦科護士:" + rom.getGrilRoom()); Console.ReadLine(); }

結果:

簡單工廠的基本原理:建立工廠,他根據資料,返回眾多可返回例項中的一個例項,然後在不用知道例項化的是那個子類的情況下,呼叫返回類的例項方法。

 

設計模式系列

歡迎加入左上方群,進行討論學習

相關文章