创建型:工厂模式-简单工厂

时间:2021-04-21 00:41:03
创建型:工厂模式-简单工厂

简单工厂-餐馆点菜

它很像我们去餐馆点菜:比如说点一份辣椒炒肉,我们不用关心肉是切丝还是块状、用红辣椒还是其他辣椒等这些菜品制作过程中的问题,我们只关心摆上桌那道菜

在工厂模式里,我传参这个过程就是点菜,工厂函数里面运转的逻辑就相当于炒菜的厨师和上桌的服务员做的那部分工作——这部分工作我们同样不用关心,我们只要能拿到工厂交付给我们的实例结果就行了

简单工厂代码

如下代码在工厂方法中通过不同的类型参数返回不同的车实例。

static 即可。

class BydCar {
  constructor (name, time) {
    this.carName = name
    this.time = time 
  }
  runCarName () {
    console.log(this.carName)
  }
}

class JeepCar {
  constructor (name, time) {
    this.carName = name
    this.time = time 
  }
  runCarName () {
    console.log(this.carName)
  }
}

class BenzCar {
  constructor (name, time) {
    this.carName = name
    this.time = time
  }
  runCarName () {
    console.log(this.carName)
  }
}
class CarFactory {
// 创建车的工厂 createCar (carType, name, time) {
if (carType === 'byd') { return new BydCar(name, time) } if (carType === 'jeep') { return new JeepCar(name, time) } if (carType === 'benz') { return new BenzCar(name, time) } } } // 工厂对象 const carFactory = new CarFactory() // 生成各个具体的实例 const bydCar = carFactory.createCar('byd', 'byd 汽车', '2022-10-20') const jeepCar = carFactory.createCar('jeep', 'jeep 汽车', '2022-10-20') const benzCar = carFactory.createCar('benz', 'benz 汽车', '2022-10-20') // 各个实例干自己的事情 bydCar.runCarName() jeepCar.runCarName() benzCar.runCarName()

优点

  • 即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

缺点

  • ,一旦不能正常工作,整个系统都要受到影响。
  • 简单工厂模式负责的产品过多时,代码可能会很长,在一定程序上增加了系统的复杂度和可读性。
  • 在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

对于产品种类相对较少的情况,使用简单工厂模式非常简洁。外部只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。

小结

  1. 简单工厂模式非常简单只要提供一个工厂即可,将创建对象的过程单独封装
  2. 同时它的应用场景也非常容易识别:构造多个不同实例的地方,我们应该想到简单工厂;
  3. 在写了大量构造函数、调用了大量的 new、自觉非常不爽的情况下,我们就应该思考是不是可以掏出工厂模式重构我们的代码了。

简单工厂关注的是不同的产品(对象),它的特点是“简单粗暴”,通过一个含参的工厂方法,我们可以在工厂中实例化任何产品类,上至飞机火箭,下至土豆面条,无所不能。