简单工厂:一个类,提供一个方法,内部用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(); } } }
原文:http://www.cnblogs.com/zkzk945/p/5107615.html