简单工厂模式---顾名思义,就是有一个工厂,你用它可以生产不同的产品,当然产品的生产细节你不需要知道,你只负责得到产品,生产过程都封装在工厂内部。简言之,就是一个工厂,你要告诉他你想要的产品名称,他就给你输出产品。
下面我们举个例子简单说明一下。你和朋友去吃肯德基,你告诉服务员我要鸡翅,你朋友说我要炸土豆条。过了一会,你们要得东西就来了,但是他们怎么做的你们不知道吧?你们只管开吃就好了。
用代码实现该过程:
首先,定义一个接口:用来获取不同产品
1 public interface IFood 2 { 3 void get(); 4 }
然后,分别用两个类继承实现IFood接口:分别得到鸡腿和炸土豆条
1 public class McChicken:IFood 2 { 3 public void get() 4 { 5 Console.WriteLine("I want McChicken!"); 6 } 7 } 8 9 public class Chips:IFood 10 { 11 public void get() 12 { 13 Console.WriteLine("I want Chips!"); 14 } 15 }
接下来,就要建工厂来控制制造不同的产品了:
1 public class FoodFactory 2 { 3 public static IFood GetFood(string type) 4 { 5 string foodType = "FactoryMode" + '.' + type; 6 return (IFood)Assembly.Load("FactoryMode").CreateInstance(foodType);//反射:Assembly.Load("程序集").CreateInstance("命名空间.类") 7 } 8 }
9 不习惯反射的就用下面的代码:效果是一样的 10 public class FoodFactory 11 { 12 public static IFood GetFood(string type) 13 { 14 if (type.Equals("McChicken")) 15 return new McChicken(); 16 if (type.Equals("Chips")) 17 return new Chips(); 18 else return null; 19 } 20 }
最后,来测试一下我们的工厂吧。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 IFood mcChiken = FoodFactory.GetFood("McChicken"); 6 IFood chips = FoodFactory.GetFood("Chips"); 7 mcChiken.get(); 8 chips.get(); 9 Console.ReadLine(); 10 } 11 }
输出结果:I want McChicken!
I want Chips!