工厂方法模式
引用:简单工厂模式,存在扩展困难的的问题。这里介绍工厂方法模式
个人理解:定义抽象基类,和抽象实现类。使用的时候具体实现,抽象基类和抽象实现。
工厂方法模式定义
工厂不在负责对象的创建,而是定义了接口,实现必须要完成的工作。具体对象的创建,有对象子类完成的子类完成。这样扩展新的产品的时候,只要实现工作,并建立实现子类,即可扩展。
class Program { static void Main(string[] args) { //沙县 ShaxinFactory shaxinFactory=new ShaxinFactory(); Restaurant restaurant = shaxinFactory.CreateRestaurantFactory(); Console.WriteLine(restaurant.Buy()); //麦当劳实现 MacDonaldFactory macDonaldFactory=new MacDonaldFactory(); restaurant = macDonaldFactory.CreateRestaurantFactory(); Console.WriteLine(restaurant.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(); } }
这里如果,要在添加新的产品,就不用修改原来的代码。直接添加类,和创建产品子类(继承创建产品的抽象工厂类)。
这里创建对象的抽象工厂类,可以使用单例模式,这样就进一步提高了效率。