设计模式-简单工厂模式
前言
点击查看:设计模式系列
设计模式的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(); }
结果:
简单工厂的基本原理:创建工厂,他根据数据,返回众多可返回实例中的一个实例,然后在不用知道实例化的是那个子类的情况下,调用返回类的实例方法。