1,简单例子
//汽车的抽象类
public abstract class AbstractCar
{
public abstract void StartUp();
public abstract void Run();
public abstract void Turn(Direction direction);
public abstract void Stop();
}
//具体的红旗轿车
public class HongQiCar : AbstractCar
{
public override void StartUp()
{
//
.
}
public override void Run()
{
//
.
}
public override void Turn(Direction direction)
{
//
.
}
public override void Stop()
{
//
.
}
}
//抽象工厂
public abstract class CarFactory
{
public abstract AbstractCar CreateCar();
}
//实际工厂
public class HongQiCarFactory : CarFactory
{
public override AbstractCar CreateCar()
{
return new HongQiCar();
}
}
//测试框架
public class CarTestFramework
{
private AbstractCar abstractCar;
public void BuildTestContext(CarFactory carFactory)
{
abstractCar = carFactory.CreateCar();
}
public void DoTest()
{
abstractCar.StartUp();
abstractCar.Run();
//
.
}
}
//客户程序
public class App
{
public static void Main()
{
CarTestFramework ctf = new CarTestFramework();
ctf.BuildTestContext(new HongQiCarFactory());
}
}
2,工厂方法模式与简单工厂模式public abstract class AbstractCar
{
public abstract void StartUp();
public abstract void Run();
public abstract void Turn(Direction direction);
public abstract void Stop();
}
//具体的红旗轿车
public class HongQiCar : AbstractCar
{
public override void StartUp()
{
//
.}
public override void Run()
{
//
.}
public override void Turn(Direction direction)
{
//
.}
public override void Stop()
{
//
.}
}
//抽象工厂
public abstract class CarFactory
{
public abstract AbstractCar CreateCar();
}
//实际工厂
public class HongQiCarFactory : CarFactory
{
public override AbstractCar CreateCar()
{
return new HongQiCar();
}
}
//测试框架
public class CarTestFramework
{
private AbstractCar abstractCar;
public void BuildTestContext(CarFactory carFactory)
{
abstractCar = carFactory.CreateCar();
}
public void DoTest()
{
abstractCar.StartUp();
abstractCar.Run();
//
.}
}
//客户程序
public class App
{
public static void Main()
{
CarTestFramework ctf = new CarTestFramework();
ctf.BuildTestContext(new HongQiCarFactory());
}
}
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
工厂方法模式退化后可以演变成简单工厂模式。
3,要点
• Factory Method模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。
• Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
• Factory Method模式解决“单个对象”的需求变化,Abstract Factory 模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。
浙公网安备 33010602011771号