美文网首页
浅谈GoF23设计模式-“FactoryMethod”模式

浅谈GoF23设计模式-“FactoryMethod”模式

作者: 浅谈码生活 | 来源:发表于2020-08-11 11:32 被阅读0次

“FactoryMethod”模式简介:工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,主要将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。

“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 ());

}

}

相关文章

网友评论

      本文标题:浅谈GoF23设计模式-“FactoryMethod”模式

      本文链接:https://www.haomeiwen.com/subject/kmmedktx.html