上一章我们讲了模板方法,并复习了一下c#的继承的一些语法。

今天讲的工厂方法其实和模板方法有一个共同的特点,就是,将建立对象实例都交给子类。

其实形象一点说,工厂模式就好比,mm告诉你她要吃汉堡包,那你要做的就是带她去KFC。

okay,我们就以这个为例子,看看用程序如何让mm吃到汉堡包。

首先我们肯定要有一个食物的类,这个类是个抽象类,因为我们不能确定mm除了吃汉堡包,还要不要吃鸡腿。

public abstract class Food
    {
        public abstract string Eated();
    }

接着还要有一个汉堡包的继承类,当然也可以是鸡腿类。

public class Hamburger : Food
    {
        //你要带哪个mm去吃汉堡
        private string mm;
       
        public Hamburger(string mm)
        {
            this.mm = mm;
        }

        public override string Eated()
        {
            return "汉堡被" + mm + "吃了,并且" + mm + "很高兴";

        }
    }

然后还有一个快餐店noshery类,因为你不确定是要带mm去kfc还是去麦当劳,所以这个工厂类是个抽象类:

public abstract class Noshery
    {
        public abstract Food CreateFood(string mm);
    }

假设你要带mm去吃KFC的汉堡包

    public class KFC : Noshery
    {
        //你要为哪个mm买东西
        public override Food CreateFood(string mm)
        {
            Food food = new Hamburger(mm);
            return food;
        }
    }

工厂模型完成,你就可以带某个mm去吃KFC的汉堡包了。

假如张美眉说,要去KFC吃汉堡,你应该这么做:

            //确定要去KFC

            Noshery noshery = new KFC();
            //给张美眉点了一个汉堡

            Food food = noshery.CreateFood("张美眉");

            //张美眉得到汉堡并吃下
            System.Console.WriteLine(food.Eated());
            System.Console.ReadLine();

输出:

汉堡被张美眉吃了,并且张美眉很高兴。

mm高兴了,你高兴了吗?