工厂方法模式

引用:简单工厂模式,存在扩展困难的的问题。这里介绍工厂方法模式

个人理解:定义抽象基类,和抽象实现类。使用的时候具体实现,抽象基类和抽象实现。

工厂方法模式定义

  工厂不在负责对象的创建,而是定义了接口,实现必须要完成的工作。具体对象的创建,有对象子类完成的子类完成。这样扩展新的产品的时候,只要实现工作,并建立实现子类,即可扩展。

 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();
        }
    }

这里如果,要在添加新的产品,就不用修改原来的代码。直接添加类,和创建产品子类(继承创建产品的抽象工厂类)。

这里创建对象的抽象工厂类,可以使用单例模式,这样就进一步提高了效率。

posted @ 2017-02-15 18:37  WangwangJie  阅读(180)  评论(0编辑  收藏  举报