抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,则无需指定它们的类。
看完上面之后…
我们再来看下抽象工厂的类图…
    /// <summary>
    /// 塑模 (ID,Name)
    /// </summary>
    class Mold
    {
        private int _id;
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        private string _moldName;
        public string MoldName
        {
            get { return _moldName; }
            set { _moldName = value; }
        }
    }
    interface 塑模厂
    {
        void CreateMold(Mold newMold);
         Mold GetMold(int ID);
    }
    class 上海塑模厂 : 塑模厂
    {
        public void CreateMold(Mold newMold)
        {
            Console.WriteLine(“在上海塑模厂内生产一个模型”);
        }
        public Mold GetMold(int ID)
        {
            Console.WriteLine(“上海塑模厂内得到一个模型”);
            return null;
        }
    }
    class 浙江塑模厂 : 塑模厂
    {
        public void CreateMold(Mold newMold)
        {
            Console.WriteLine(“在浙江塑模厂内生产一个模型”);
        }
        public Mold GetMold(int ID)
        {
            Console.WriteLine(“浙江塑模厂内得到一个模型”);
            return null;
        }
    }
    /// <summary>
    /// 马达
    /// </summary>
    class Motor
    {
        private int _id;
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        private string _motorName;
        public string MotorName
        {
            get { return _motorName; }
            set { _motorName = value; }
        }
    }
    interface 马达厂
    {
        void CreateMotor(Motor newMotor);
        Mold GetMotor(int ID);
    }
    class 四川马达厂 : 马达厂
    {
        public void CreateMotor(Motor newMotor)
        {
            Console.WriteLine(“在四川马达厂内生产一个马达”);
        }
        public Mold GetMotor(int ID)
        {
            Console.WriteLine(“四川马达厂内得到一个马达”);
            return null;
        }
    }
    class 重庆马达厂 : 马达厂
    {
        public void CreateMotor(Motor newMotor)
        {
            Console.WriteLine(“在重庆马达厂内生产一个马达”);
        }
        public Mold GetMotor(int ID)
        {
            Console.WriteLine(“重庆马达厂内得到一个马达”);
            return null;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //首先我们需要一个浙江模型厂的模型
            Mold newMold = new Mold();
            newMold.ID = 0;
            newMold.MoldName = “A品牌马达”;
            塑模厂 new塑模厂 = new 浙江塑模厂();
            new塑模厂.CreateMold(newMold);
            //接着我们需要一个四川马达
            Motor newMotor = new Motor();
            newMotor.ID = 0;
            newMotor.MotorName = “A品牌马达”;
            马达厂 new马达厂 = new 四川马达厂();
            new马达厂.CreateMotor(newMotor);
            //当然如果我们这个时候需要更换重庆的马达,则直接马达厂 new马达厂 = new 重庆马达厂();
            //…
            Console.Read();
        }
    }
PS:抽象工厂的好处
1、
易于交换产品系列,由于具体工厂类,例如Factory newFactory = new XX厂子();
在一个应用中只需要在初始化的时候出现异常,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。我们的设计不能去防止需求的更改,
那么我们的理想便是让改动变得最小。
2、
它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操作实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码里。