设计模式与前端:优缺点以及使用场景(五)| 青训营

78 阅读3分钟

1:简单工厂模式

简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例,它的本质是通过传入不同的参数实现多态。以此达到实例化不同对象的目的。

// 简单工厂函数
function createProduct(type) {
  let product;

  if (type === 'A') {
    product = new ProductA();
  } else if (type === 'B') {
    product = new ProductB();
  } else if (type === 'C') {
    product = new ProductC();
  }

  return product;
}

// 产品类
class ProductA {
  constructor() {
    this.name = 'Product A';
  }
}

class ProductB {
  constructor() {
    this.name = 'Product B';
  }
}

class ProductC {
  constructor() {
    this.name = 'Product C';
  }
}

// 使用简单工厂创建产品
const productA = createProduct('A');
console.log(productA.name); // 输出: Product A

const productB = createProduct('B');
console.log(productB.name); // 输出: Product B

const productC = createProduct('C');
console.log(productC.name); // 输出: Product C

我们简单工厂非常简单,就是它只会生产同一类产品,而且种类是写死的。但是会有一个问题,如果我想加一个产品D怎么办?我还要写一个D的类,然后再添加一个else-if,这样会使createProduct方法的职责过重比较麻烦。

这时候,工厂方法模式就出现了。

2:工厂方法模式

工厂方法模式是对简单工厂模式进行了一次抽象,将某一类对象具体细分给对应的工程,比方说A要在A工厂里生产,B要在B工厂里生产。专人干专事。相比于简单工厂,工厂方法将修改原来的代码转变为单纯的增加代码。

// 工厂基类
class Factory {
  createProduct() {
    throw new Error('This method should be overridden.');
  }
}

// 具体工厂类
class ProductAFactory extends Factory {
  createProduct() {
    return new ProductA();
  }
}

class ProductBFactory extends Factory {
  createProduct() {
    return new ProductB();
  }
}

class ProductCFactory extends Factory {
  createProduct() {
    return new ProductC();
  }
}

// 产品类同上

// 使用工厂方法创建产品
const productAFactory = new ProductAFactory();
const productA = productAFactory.createProduct();
console.log(productA.name); // 输出: Product A

const productBFactory = new ProductBFactory();
const productB = productBFactory.createProduct();
console.log(productB.name); // 输出: Product B

const productCFactory = new ProductCFactory();
const productC = productCFactory.createProduct();
console.log(productC.name); // 输出: Product C

但是这个时候我要新增一个D类呢?我们还是需要再写一个D工厂。

所以说,工厂方法的缺点就是类的个数容易增多,增加复杂度,而且会增加系统抽象性和理解难度。

3:简单工厂模式和工厂方法模式的对比

工厂方法模式并不是一定优于简单工厂模式,适合的才是最好的。

下面我们比较一下两种工厂模式的优缺点:

首先说一下简单工厂模式的优点:

1:代码复杂度低 2:结构复杂度低

3:编程复杂度低 4:管理复杂度低

说一下方法工厂模式的优点:

1、一个调用者想创建一个对象,只要知道其名称就可以了。

2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

3、屏蔽产品的具体实现,调用者只需要关心产品的接口。

方法工厂模式的缺点:

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

结论:

根据设计原则:使用工厂方法模式

根据实际业务:简单工厂模式更适用