抽象工厂

  

  抽象工厂,通过名字就知道它是一个抽象的类,并且用这个类来充当一个容器.用来返回抽象对象.

  比如,我开了一个店,用来卖小吃的.我卖鸭脚和鸭脖

    abstract class YaBo//鸭脖
    {
        public abstract void Create();
    }
    abstract class YaJiao//鸭脚
    {
        public abstract void Create();
    }

  因为现在只是我一个在卖,所以比较简单,所以我创建了一个工厂,用来创建我们需要的对象

    abstract class Factory//抽象工厂
    {
        public abstract YaBo CreateYaBo();
        public abstract YaJiao CreateYaJiao();
    }

  但现在是我们还没有自己的鸭脖,鸭脚的实现

    class CongQingYaBo : YaBo
    {
        public override void Create()
        {
            Console.WriteLine("重庆的鸭脖子有点辣.0.");
        }
    }
    class CongQingYaJiao:YaJiao
    {
        public override void Create()
        {
            Console.WriteLine("重庆鸭脚也很辣.......");
        }
    }

  现在就差一步了,那就是实现我们自己的工厂

    class CongQingYaBoFactory:Factory
    {

        public override YaBo CreateYaBo()
        {
            return new CongQingYaBo();
        }

        public override YaJiao CreateYaJiao()
        {
            return new CongQingYaJiao();
        }
    }

  这样一个工厂方法就写好了,我们来看一下怎么使用

            Factory f = new CongQingYaBoFactory();
            f.CreateYaBo().Create();

   假如现在我们的店越做越大,开了广东的分店,那么我们就需要实现广东鸭脖鸭脚的实现

    class GuanDongYaBo : YaBo
    {

        public override void Create()
        {
            Console.WriteLine("广东鸭脖好甜..........");
        }
    }
    class GuanDongYaJiao : YaJiao
    {

        public override void Create()
        {
            Console.WriteLine("广东鸭脚好甜..........");
        }
    }
    class GuanDongYaJiaoFactory : Factory
    {

        public override YaBo CreateYaBo()
        {
            return new GuanDongYaBo();
        }

        public override YaJiao CreateYaJiao()
        {
            return new GuanDongYaJiao();
        }
    }
Hold on, everything is possible.
原文地址:https://www.cnblogs.com/student-note/p/6529661.html