当前位置:首页 > JavaScript

js实现工厂

2026-03-13 19:47:47JavaScript

工厂模式的概念

工厂模式是一种创建型设计模式,用于封装对象的创建逻辑,避免直接在代码中通过 new 实例化对象。它通过工厂方法或工厂类统一管理对象的创建过程,提高代码的可维护性和扩展性。

简单工厂模式

通过一个工厂函数集中创建对象,根据传入的参数返回不同的实例。

function createProduct(type) {
  switch (type) {
    case 'A':
      return new ProductA();
    case 'B':
      return new ProductB();
    default:
      throw new Error('Unknown product type');
  }
}

class ProductA {
  operate() {
    return 'Product A';
  }
}

class ProductB {
  operate() {
    return 'Product B';
  }
}

// 使用
const product = createProduct('A');
console.log(product.operate()); // 输出: Product A

工厂方法模式

将对象的创建延迟到子类,通过继承实现不同产品的工厂。

class Factory {
  createProduct() {
    throw new Error('Method must be implemented');
  }
}

class ProductAFactory extends Factory {
  createProduct() {
    return new ProductA();
  }
}

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

// 使用
const factoryA = new ProductAFactory();
const productA = factoryA.createProduct();
console.log(productA.operate()); // 输出: Product A

抽象工厂模式

提供一个接口用于创建相关或依赖对象的家族,而不需要指定具体类。

class AbstractFactory {
  createProductA() {
    throw new Error('Method must be implemented');
  }
  createProductB() {
    throw new Error('Method must be implemented');
  }
}

class ConcreteFactory1 extends AbstractFactory {
  createProductA() {
    return new ProductA1();
  }
  createProductB() {
    return new ProductB1();
  }
}

class ProductA1 {
  operate() {
    return 'Product A1';
  }
}

class ProductB1 {
  operate() {
    return 'Product B1';
  }
}

// 使用
const factory1 = new ConcreteFactory1();
const productA1 = factory1.createProductA();
console.log(productA1.operate()); // 输出: Product A1

适用场景

  • 需要动态创建不同类的实例时。
  • 对象创建逻辑复杂或需要统一管理时。
  • 希望解耦对象的使用和创建过程时。

优缺点

优点

  • 代码更清晰,避免重复的 new 操作。
  • 易于扩展新的产品类型。

缺点

js实现工厂

  • 引入额外的工厂类可能增加代码复杂度。

标签: 工厂js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…