在上一節中介紹了簡單原廠模式,這一節中介紹Factory 方法。還是拿上節中提到的汽車的例子來說明,
每一輛汽車都有車門、輪子等組成,這是汽車的共性,但是不同品牌的汽車生產的車門、輪子等這
些汽車的組件是不相同的,我們要做的工作就是“抽象出共性,開放出個性”。由於汽車的裝配必須
要經過車門生產這個環節,所以我們把車門生產抽象出來作為一個Factory 方法,不同的廠商去具體實現
這個方法,從而生產出不同的汽車。代碼如下:
namespace ConsoleTest.test{ public class FactoryMethodTest { public void Test() { Car car = new Bens(); car.Create(); Console.Read(); } } class Car { /// <summary> /// 建立一輛汽車 /// </summary> /// <returns></returns> virtual public Car Create() { Console.WriteLine("begin create......"); this.door = CreateDoor();//注意這裡用到了Factory 方法 Console.WriteLine("......"); Console.WriteLine("end create......"); return this; } /// <summary> /// 這是一個Factory 方法,具體要建立什麼樣的門,由子類來確定 /// </summary> /// <returns></returns> virtual protected Door CreateDoor() { Console.WriteLine("create door"); return new Door(); } protected Door door; } class Bens : Car { public override Car Create() { Console.WriteLine("create bens"); return base.Create(); } /// <summary> /// Factory 方法的具體實現 /// </summary> /// <returns></returns> protected override Door CreateDoor() { Console.WriteLine("create bens door"); return new BensDoor(); } } class BMW : Car { public override Car Create() { Console.WriteLine("create bmw"); return base.Create(); } /// <summary> /// Factory 方法的具體實現 /// </summary> /// <returns></returns> protected override Door CreateDoor() { Console.WriteLine("create bmw door"); return new BMWDoor(); } } class Door { } class BensDoor : Door { } class BMWDoor : Door { }}
從上面的代碼可以看成,Factory 方法其實也是比較好理解的。上面的代碼中Car的Create方法,其實用到了另外一種設計模式——模板方法。
在後面的文章中會繼續介紹,今天先到這裡,繼續上班。。。