工厂模式

通过工厂模式实现对象创建与调用者的解耦

问题

什么是工厂模式,以及它解决了什么问题?

解答

什么是工厂模式

工厂模式提供了一种创建对象的方式,在创建对象时不向客户端暴露创建逻辑,而是通过一个共同的接口来指向新创建的对象。它实现了创建者和调用者的分离。

工厂模式分为三种类型:

简单工厂模式

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

class SimpleFactory {
  static create(type) {
    switch(type) {
      case 'A':
        return new Product('产品A');
      case 'B':
        return new Product('产品B');
      default:
        throw new Error('未知产品类型');
    }
  }
}

// 使用
const productA = SimpleFactory.create('A');

工厂方法模式

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

class Factory {
  createProduct() {
    throw new Error('子类必须实现此方法');
  }
}

class FactoryA extends Factory {
  createProduct() {
    return new Product('产品A');
  }
}

class FactoryB extends Factory {
  createProduct() {
    return new Product('产品B');
  }
}

// 使用
const factoryA = new FactoryA();
const productA = factoryA.createProduct();

抽象工厂模式

class AbstractFactory {
  createProductA() {
    throw new Error('子类必须实现此方法');
  }
  createProductB() {
    throw new Error('子类必须实现此方法');
  }
}

class ConcreteFactory extends AbstractFactory {
  createProductA() {
    return new ProductA();
  }
  createProductB() {
    return new ProductB();
  }
}

工厂模式的优势

工厂模式用工厂方法代替 new 操作来实例化对象,带来以下好处:

  • 降低程序的耦合性,调用者不需要知道具体的实现类
  • 统一管理对象的创建逻辑,便于后期维护和修改
  • 将对象创建和使用分离,符合单一职责原则

关键点

  • 工厂模式将对象创建逻辑封装起来,调用者无需关心具体实现
  • 用工厂方法代替 new 操作,降低代码耦合性
  • 分为简单工厂、工厂方法、抽象工厂三种类型
  • 便于统一管理和控制对象的创建过程