“FactoryMethod”模式简介:工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,主要将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。
“FactoryMethod”模式动机:本着“关闭修改,开放扩展”的原则,在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口,所以我们引入FactoryMethod模式。
“FactoryMethod”模式要点:
1.)FactoryMethod模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。
2.)FactoryMethod模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展的策略,较好的解决了这种紧耦合的关系。
3.)FactoryMethod模式解决“单个对象”的需求变化,AbstractFactory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。
接下来我们演示一个简单例子:
//测试汽车案例
//Car.cs
public abstract class Car{
public abstract void Start();//启动
public abstract void Run();//跑
public abstract void Turn();//转向
public abstract void Stop();//停止
}
//汽车工厂抽象类
//CarFactory.cs
public abstract class CarFactory{
public abstract Car CreateCar();
}
//汽车测试类
//CarTestFrameWork.cs
public class CarTestFrameWork{
public void BuildTest(CarFactory xxxCarFactory ){
Car car = xxxCarFactory.CreateCar();// xxxCarFactory为 CarFactory延迟工作的子类
car.Start();
car.Turn();
car.Stop();
}
//以奔驰车为例
//继承Car抽象类
class BenciCar : Car{
public override void Start(){ Console.Write("等待10分钟...")}
public override void Run(){ Console.Write("转速达到3000转...") }
public override void Turn(){ Console.Write("向右转...") }
public override Stop(){ Console.Write("紧急刹车...") }
}
//创建我们的奔驰工厂
//继承“CarFactory”,BenciCarFactory.cs
class BenciCarFactory: CarFactory{
public override Car CreateCar(){
return new BenciCar ()
}
使用客户程序开始测试
App.cs
class App{
public void Main(){
CarTestFrameWork carTest = new CarTestFrameWork ();
carTest. BuildTest(new BenciCarFactory ());
}
}