/*Factory method 模式:
* 场景:测试软件要测试多种类型的汽车。
* 软件系统中,经常面临“某个对象”的创建工作,由于需求的变化,这个对象经常面临剧烈的变化,但是他却拥有比较稳定的接口。
* 特点:对象变化,接口稳定。
* 目标:提供一种封装机制,隔离这个“容易变化的对象”,从而保持系统中“其他依赖该对象的对象”不随着需求的变化而改变。
*
* 意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
*/
class FactoryMethod
{
}
public abstract class AbstractCar
{
public abstract void StartUp();
public abstract void Run();
public abstract void TurnDirection(int direction);
public abstract void Stop();
}
public class HongqiCar : AbstractCar
{
public HongqiCar()
{ System.Console.WriteLine("HongqiCar"); }
public override void StartUp()
{ }
public override void Run()
{ }
public override void TurnDirection(int direction)
{ }
public override void Stop()
{ }
}
//汽车创建工厂
abstract class AbstractCarFactory
{
public abstract AbstractCar CreateCar();
}
class HongqiCarFactory : AbstractCarFactory
{
public override AbstractCar CreateCar()
{
return new HongqiCar();
}
}
//汽车测试框架,只依赖与汽车抽象工厂和汽车的抽象
class CarTestFramework
{
public void BuildTestContex(AbstractCarFactory abstractCarFactory)
{
AbstractCar ac1 = abstractCarFactory.CreateCar();
AbstractCar ac2 = abstractCarFactory.CreateCar();
//可以根据传入工厂类型的创建相应类型的汽车,并得到该类汽车的多个实例,并对他们进行测试
}
public void TestStartUp(AbstractCarFactory abstractCarFactory)
{
//测试启动
}
public void TestRun(AbstractCarFactory abstractCarFactory){}
public void TestTurnDirection(AbstractCarFactory abstractCarFactory) { }
public void TestStop(AbstractCarFactory abstractCarFactory) { }
//客户程序
/*说明:当要增加其他种类的汽车,如DongfenCar时,只需要在新建两个类,分别继承他们的工厂。
* DongfenCar:AbstractCar
* DongfenCarFactory:AbstractCarFactory
* 在使用测试类的时候,改为frwk.BuildTestContex(new DongfengCarFactory());
* Abstract Factory:解决系列对象的需求变化
* Builder模式:解决对象部分需求变化
* Factory Method:解决单个对象的需求变化
* 程序输出:
* HongqiCar
* HongqiCar
*/
static void Main (string[] args)
{
CarTestFramework frwk = new CarTestFramework();
frwk.BuildTestContex(new HongqiCarFactory());
System.Console.WriteLine("end");
}
}