引用:简单工厂模式,存在扩展困难的的问题。这里介绍工厂方法模式
工厂方法模式定义
工厂不在负责对象的创建,而是定义了接口,实现必须要完成的工作。具体对象的创建,有对象子类完成的子类完成。这样扩展新的产品的时候,只要实现工作,并建立实现子类,即可扩展。
class Program { static void Main(string[] args) { /* //使用工厂类,想要什么类直接用工厂生产 //想吃沙县,跑到沙县餐厅去买 Restaurant restaurant = RestaurantSimpleFactory.CreateRestaurant("沙县"); Console.WriteLine(restaurant.Buy()); //想吃麦当劳,跑到麦当劳餐厅去买 restaurant = RestaurantSimpleFactory.CreateRestaurant("麦当劳"); Console.WriteLine(restaurant.Buy()); */ //工厂方法 ShaxinFactory shaxinFactory=new ShaxinFactory(); Restaurant restaurant = shaxinFactory.CreateRestaurantFactory(); Console.WriteLine(restaurant.Buy()); //麦当劳实现 MacDonaldFactory macDonaldFactory=new MacDonaldFactory(); Restaurant restaurant1 = macDonaldFactory.CreateRestaurantFactory(); Console.WriteLine(restaurant1.Buy()); Console.ReadLine(); } } /// <summary> /// 抽象出餐馆类 /// </summary> public abstract class Restaurant { public abstract string Buy(); } /// <summary> /// 抽象工厂 /// </summary> public abstract class Creator { public abstract Restaurant CreateRestaurantFactory(); } /// <summary> /// 沙县餐馆 /// </summary> public class Shaxin:Restaurant { public override string Buy(){return "飘香拌面!";} } /// <summary> /// 沙县抽象工厂 /// </summary> public class ShaxinFactory:Creator { /// <summary> /// 实现抽象工厂 /// </summary> /// <returns></returns> public override Restaurant CreateRestaurantFactory() { return new Shaxin(); } } /// <summary> /// 麦当劳餐厅 /// </summary> public class MacDonald:Restaurant { public override string Buy() { return "麦辣鸡腿包套餐!"; } } /// <summary> /// 麦当劳抽象类 /// </summary> public class MacDonaldFactory : Creator { public override Restaurant CreateRestaurantFactory() { return new MacDonald(); } } /// <summary> /// 简单工厂,根据用户选择的餐馆去买饭 /// </summary> public class RestaurantSimpleFactory { public static Restaurant CreateRestaurant(string type) { Restaurant restaurant = null; switch (type) { case "沙县" :restaurant= new Shaxin();break; case "麦当劳": restaurant=new MacDonald();break; } return restaurant; } }
这里如果,要在添加新的产品,就不用修改原来的代码。直接添加类,和创建产品子类(继承创建产品的抽象工厂类)。
这里创建对象的抽象工厂类,可以使用单例模式,这样就进一步提高了效率。