首页 > 代码库 > 设计模式-简单工厂模式

设计模式-简单工厂模式

前言

点击查看:设计模式系列

设计模式的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(); }

结果:

简单工厂的基本原理:创建工厂,他根据数据,返回众多可返回实例中的一个实例,然后在不用知道实例化的是那个子类的情况下,调用返回类的实例方法。

 

设计模式系列

欢迎加入左上方群,进行讨论学习