前言
點選檢視:設計模式系列
設計模式的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(); }
結果:
簡單工廠的基本原理:建立工廠,他根據資料,返回眾多可返回例項中的一個例項,然後在不用知道例項化的是那個子類的情況下,呼叫返回類的例項方法。