在上一节中介绍了简单工厂模式,这一节中介绍工厂方法。还是拿上节中提到的汽车的例子来说明,
每一辆汽车都有车门、轮子等组成,这是汽车的共性,但是不同品牌的汽车生产的车门、轮子等这
些汽车的部件是不相同的,我们要做的工作就是“抽象出共性,开放出个性”。由于汽车的装配必须
要经过车门生产这个环节,所以我们把车门生产抽象出来作为一个工厂方法,不同的厂商去具体实现
这个方法,从而生产出不同的汽车。代码如下:
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();//注意这里用到了工厂方法
Console.WriteLine("......");
Console.WriteLine("end create......");
return this;
}
/// <summary>
/// 这是一个工厂方法,具体要创建什么样的门,由子类来确定
/// </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>
/// 工厂方法的具体实现
/// </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>
/// 工厂方法的具体实现
/// </summary>
/// <returns></returns>
protected override Door CreateDoor()
{
Console.WriteLine("create bmw door");
return new BMWDoor();
}
}
class Door
{
}
class BensDoor : Door
{
}
class BMWDoor : Door
{
}
}
从上面的代码可以看成,工厂方法其实也是比较好理解的。上面的代码中Car的Create方法,其实用到了另外一种设计模式——模板方法。
在后面的文章中会继续介绍,今天先到这里,继续上班。。。