简单工厂的方法实现过程核心就是之前介绍的接口应用。所以直接上代码:
public interface IPerson { void Say(); } public class Student : IPerson { public void Say() { Console.WriteLine("我是学生...."); } } public class Teacher : IPerson { public void Say() { Console.WriteLine("我是老师...."); ; } }
上面创建了一个规划(接口)IPerson,要求有一个Say的方法。类Student、Teacher都继承于这个规范。下面是简单工厂的核心。依据P_Type的类型创建不同的实例类。
public enum P_Type { 学生, 老师 } public class Factory { public IPerson GetSay(P_Type p_type) { switch (p_type) { case P_Type.学生: return new Student(); case P_Type.老师: return new Teacher(); default: throw new Exception("什么都不是.."); } } }
客户端的调用:
static void Main(string[] args) { IPerson ip; try { Factory fc = new Factory(); ip = fc.GetSay(P_Type.学生); ip.Say(); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
这次调用的时候我们给的条件是P_Type.学生,也就是我们需要创建Student类的实例。那么有个问题是下次再修改的时候,不仅需要扩充我们的类,而且我们还需要修改主程序的代码。个人感觉,修改高层的代码(主程序)风险是非常大的,所以为了更加模块化,单一化,便于后期修改,我们又提炼了简单工厂,将工厂抽象化,这就是工厂模式,后面讲会介绍。