前言
點擊查看:設計模式系列
設計模式的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(); }
結果:
簡單工廠的基本原理:創建工廠,他根據數據,返回眾多可返回實例中的一個實例,然后在不用知道實例化的是那個子類的情況下,調用返回類的實例方法。