设计原则:松耦合,高内聚
动机:在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。所有,我们需要提供一种“封装机制”来隔离出这个“易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变。
意图:定义一个对象的接口,让子类决定实例化那一个类。Factory Method使得一个类的实例化延迟到子类。
基本 Code :public abstract class Car
{
public abstract void Startup();
public abstract void Run();
public abstract void Turn(Direction direction);
public abstract void Stop();
}
public abstract class CarFactory
{
public abstract Car CreateCar();
}
public class HongqiCar: Car
{
public override void Startup()
{
}
public override void Run()
{
}
public override void Turn(Direction direction)
{
}
public override void Stop()
{
}
}
public class HongqiCarFactory:CarFactory
{
public override Car CreateCar()
{
return new HongqiCar();
}
}
public class CarTestFramework
{
public void BuildTestContext(CarFactory carFactory)
{
Car c1=carFactory.CreateCar();
Car c2=carFactory.CreateCar();
Car c3=carFactory.CreateCar();
Car c4=carFactory.CreateCar();
}
}
class App
{
static void Main()
{
CarTestFramework carTestFramework=new CarTestFramework();
//carTestFramework.BuildTestContext(new HongqiCarFactory());
carTestFramework.BuildTestContext(new DongfengFactory());
}
}
在此Code中,要添加新的车型,只需要新增DongfengCar和DongfengCarFactory就可以了。如下所示:
public class DongfengCar : Car
{
public override void Startup()
{
}
public override void Run()
{
}
public override void Turn(Direction direction)
{
}
public override void Stop()
{
}
}
public class DongfengFactory : CarFactory
{
public override Car CreateCar()
{
return new DongfengCar();
}
}
模式要点:
1、 Factory Method主要用于隔离类对象的使用者和具体类型之间的耦合关系,面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。
2、 Factory Method模式通过面向对象的手法,将所要创建对象的具体工作延迟到子类,从而一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
3、 Factory Method模式解决了“单个对象”的需求变化,Abstract Method模式解决了“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。