跳到主要内容

简述Javascript 抽象工厂模式 ?

参考答案:

在 JavaScript 中,抽象工厂模式是一种创建型设计模式,它允许你创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这种模式在创建多个复杂对象时非常有用,这些对象通常相互依赖并以某种方式组合在一起。

抽象工厂模式的主要特点包括:

  1. 抽象工厂接口:定义一个接口,用于创建一系列相关或相互依赖的对象。这个接口通常包含多个方法,每个方法都对应一种要创建的对象。
  2. 具体工厂类:实现抽象工厂接口,并为每种要创建的对象提供具体的实现。这些实现通常是在工厂类中封装的具体类实例。
  3. 抽象产品接口:定义要创建的对象的共同接口。这样,客户端代码就可以在不关心具体实现的情况下,通过抽象产品接口与这些对象进行交互。
  4. 具体产品类:实现抽象产品接口,并提供具体的实现。这些实现通常在具体的工厂类中被创建并返回给客户端。

下面是一个简单的 JavaScript 示例,展示了抽象工厂模式:

// 抽象产品接口
interface Shape {
  draw();
}

interface Color {
  fill();
}

// 具体产品类
class Circle implements Shape {
  draw() {
    console.log("Drawing a circle...");
  }
}

class Square implements Shape {
  draw() {
    console.log("Drawing a square...");
  }
}

class Red implements Color {
  fill() {
    console.log("Filling with red...");
  }
}

class Blue implements Color {
  fill() {
    console.log("Filling with blue...");
  }
}

// 抽象工厂接口
interface Factory {
  createShape(): Shape;
  createColor(): Color;
}

// 具体工厂类
class ShapeFactory implements Factory {
  createShape(): Shape {
    return new Circle();
  }

  createColor(): Color {
    return new Red();
  }
}

class SquareFactory implements Factory {
  createShape(): Shape {
    return new Square();
  }

  createColor(): Color {
    return new Blue();
  }
}

// 客户端代码
function clientCode(factory: Factory) {
  const shape = factory.createShape();
  const color = factory.createColor();

  shape.draw();
  color.fill();
}

// 使用 ShapeFactory
const shapeFactory = new ShapeFactory();
clientCode(shapeFactory);

// 使用 SquareFactory
const squareFactory = new SquareFactory();
clientCode(squareFactory);

在这个示例中,我们有两个抽象产品接口 ShapeColor,以及四个具体产品类 CircleSquareRedBlue。我们还定义了一个抽象工厂接口 Factory 和两个具体工厂类 ShapeFactorySquareFactory。客户端代码通过传递工厂对象来创建和使用产品对象,而不需要关心具体的产品实现。

这种模式的好处是,它允许你在不修改客户端代码的情况下,通过更改工厂类的实现来创建不同的产品对象。这增加了代码的灵活性和可扩展性。