设计模式:TypeScript中的工厂方法模式

​掌握工厂方法模式,轻松处理对象的创建。

欢迎来到 TypeScript 设计模式系列,该系列介绍了使用 TypeScript 进行 Web 开发的一些有用的设计模式。

之前的文章如下:


设计模式对于 web 开发人员来说非常重要,掌握它们可以让我们写出更好的代码。在本文中,我将使用 TypeScript 来介绍工厂方法模式。

工厂方法模式,也称为工厂模式,也称为多态工厂模式,属于创造模式。

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成特定的产品对象,这样做的目的是将产品类的实例化延迟到工厂子类,即通过工厂子类来确定应该实例化哪个特定的产品类。

上图中我模拟了用户购买汽车的过程,Bytefer和Chris1993分别向SuperX01和SuperX02工厂订购SuperX01和SuperX02车型,然后工厂生产相应的车型,生产完成后交付给用户。

让我们看看如何使用工厂方法来描述汽车工厂生产给定车型的过程。

为了更好地理解下面的代码,让我们先看看相应的 UML 图:

工厂方法模式包括以下角色:

  • Product(汽车):抽象产品

  • Concrete Product(SuperX01):实体产品

  • Factory(VehicleFactory):抽象工厂

  • ConcreteFactory(SuperX01Factory):实体工厂


接下来,我们定义一个抽象类Vehicle 和它的两个子类 SuperX01 和 SuperX02 来表示不同类型的车辆。

abstract class Vehicle {  abstract run(): void;}
class SuperX01 extends Vehicle {  run(): void {    console.log("SuperX01 start");  }}
class SuperX02 extends Vehicle {  run(): void {    console.log("SuperX02 start");  }}

然后,我们定义了  VehicleFactory  类来表示汽车工厂。这个抽象类包含了一个抽象方法  produceVehicle ,这就是所谓的工厂方法。

abstract class VehicleFactory {  abstract produceVehicle(): Vehicle;}

基于VehicleFactory抽象类,我们定义了SuperX01Factory和 SuperX02Factory 工厂类,用于生产 SuperX01 和 SuperX02 车型:

class SuperX01Factory extends VehicleFactory {  produceVehicle(): Vehicle {    return new SuperX01();  }}
class SuperX02Factory extends VehicleFactory {  produceVehicle(): Vehicle {    return new SuperX02();  }}

创建了  SuperX01Factory  和  SuperX02Factory  工厂类之后,我们可以开始生产汽车了:

const superX01Factory = new SuperX01Factory();const superX02Factory = new SuperX02Factory();
const superX01Vehicle = superX01Factory.produceVehicle();const superX02Vehicle = superX02Factory.produceVehicle();
superX01Vehicle.run();superX02Vehicle.run();

当你成功运行上述代码时,终端将输出以下结果:

SuperX01 startSuperX02 start

最后,让我们总结一下工厂方法模式的使用场景:

  • 在工厂方法模式中,抽象的工厂类只需要提供一个创建产品的接口,而其子类则决定要创建的具体对象,利用面向对象的多态性以及Liskov替换原则,当程序运行时,子类对象将重写父类对象,使得系统更易于扩展。


如果您有任何问题,请随时给我留言。我以后会继续介绍其他的模式,如果您感兴趣,

 欢迎关注公众号:文本魔术,了解更多

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值