工厂方法模式

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是由子类决定实例化哪个类。这样,工厂方法模式将类的实例化推迟到子类。

以下是一个简单的 JavaScript 示例,演示了工厂方法模式:

假设我们有一个计算器应用程序,需要支持不同的操作,例如加法和减法。我们可以使用工厂方法模式来实现不同操作的创建。

// 抽象产品 - 操作
class Operation {
  getResult() {}
}

// 具体产品 - 加法操作
class AdditionOperation extends Operation {
  constructor(number1, number2) {
    super();
    this.number1 = number1;
    this.number2 = number2;
  }

  getResult() {
    return this.number1 + this.number2;
  }
}

// 具体产品 - 减法操作
class SubtractionOperation extends Operation {
  constructor(number1, number2) {
    super();
    this.number1 = number1;
    this.number2 = number2;
  }

  getResult() {
    return this.number1 - this.number2;
  }
}

// 抽象创建者 - 操作工厂
class OperationFactory {
  createOperation() {}
}

// 具体创建者 - 加法操作工厂
class AdditionOperationFactory extends OperationFactory {
  createOperation(number1, number2) {
    return new AdditionOperation(number1, number2);
  }
}

// 具体创建者 - 减法操作工厂
class SubtractionOperationFactory extends OperationFactory {
  createOperation(number1, number2) {
    return new SubtractionOperation(number1, number2);
  }
}

// 客户端代码
function calculate(factory, number1, number2) {
  const operation = factory.createOperation(number1, number2);
  const result = operation.getResult();
  console.log(`Result: ${result}`);
}

const additionFactory = new AdditionOperationFactory();
calculate(additionFactory, 5, 3);  // 输出:Result: 8

const subtractionFactory = new SubtractionOperationFactory();
calculate(subtractionFactory, 5, 3);  // 输出:Result: 2