码迷,mamicode.com
首页 > Windows程序 > 详细

抽象工厂模式 c#

时间:2016-01-06 23:25:47      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

简单工厂:一个类,提供一个方法,内部用if或者switch产生需要的子对象,若需要增加新对象,需要修改这个类,很不方便。

工厂方法:一个抽象类,提供一个生产一种对象的接口,子工厂方法去实现具体的生产对象的行为,若要增加新对象,只需要通过继承增加新的子工厂类就可以了,不需要对已有的代码做什么修改,这样就解决了简单工厂的弊端。

抽象工厂方法:一个抽象类,提供多个生产多种对象的接口,这样就可以生产具有一组共性的对象,解决了工厂方法只能生产一种对象的弊端。

 

  下面这个例子,用制造汽车的工厂展示了抽象工厂方法的具体实现。

namespace ConsoleApplication1
{
    class Program
    {
        /// <summary>
        /// 汽车轮子
        /// </summary>
        public abstract class Wheel
        {
            public abstract void Print();
        }

        /// <summary>
        /// 汽车发动机
        /// </summary>
        public abstract class Engine
        {
            public abstract void Print();
        }

        /// <summary>
        /// 抽象工厂类,提供不止一个接口,比如造汽车,可以提供造车轮、引擎等方法
        /// </summary>
        public abstract class AbstractFactory
        {
            public abstract Wheel CreateWheel();
            public abstract Engine CreateEngine();
        }

        public class AudiWheel : Wheel
        {
            public override void Print()
            {
                Console.WriteLine("Create AudiWheel");
            }
        }

        public class FordEngine : Engine
        {
            public override void Print()
            {
                Console.WriteLine("Create FordEngine");
            }
        }

        public class FordWheel : Wheel
        {
            public override void Print()
            {
                Console.WriteLine("Create FordWheel");
            }
        }

        public class AudiEngine : Engine
        {
            public override void Print()
            {
                Console.WriteLine("Create AudiEngine");
            }
        }
        

        /// <summary>
        /// 生产奥迪的工厂
        /// </summary>
        public class AudiFactory : AbstractFactory
        {
            public override Wheel CreateWheel()
            {
                return new AudiWheel();
            }

            public override Engine CreateEngine()
            {
                return new AudiEngine();
            }
        }

        /// <summary>
        /// 生产福特的工厂
        /// </summary>
        public class FordFactory: AbstractFactory
        {
            public override Wheel CreateWheel()
            {
                return new FordWheel();
            }

            public override Engine CreateEngine()
            {
                return new FordEngine();
            }
        }


        static void Main(string[] args)
        {
            //制作奥迪汽车
            AbstractFactory audiFactory = new AudiFactory();
            Wheel audiWheel = audiFactory.CreateWheel();
            audiWheel.Print();
            Engine audiEngine = audiFactory.CreateEngine();
            audiEngine.Print();


            //制作福特车
            AbstractFactory fordFactory = new FordFactory();
            Wheel fordWheel = fordFactory.CreateWheel();
            fordWheel.Print();
            Engine fordEngine = fordFactory.CreateEngine();
            fordEngine.Print();

        }
    }
}

 

抽象工厂模式 c#

标签:

原文地址:http://www.cnblogs.com/zkzk945/p/5107615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!