当前位置:首页 > JavaScript

js实现工厂

2026-04-05 14:02:03JavaScript

工厂模式概述

工厂模式是一种创建型设计模式,用于封装对象的创建过程,使代码更灵活、可维护。JavaScript中可通过函数或类实现工厂模式,根据输入参数返回不同对象实例。

简单工厂实现

通过函数返回不同对象实例:

js实现工厂

function createProduct(type) {
  switch(type) {
    case 'A':
      return { name: 'Product A', price: 100 };
    case 'B':
      return { name: 'Product B', price: 200 };
    default:
      throw new Error('Unknown product type');
  }
}

const productA = createProduct('A');
const productB = createProduct('B');

工厂方法模式

通过子类决定实例化哪个类:

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

class ProductAFactory extends ProductFactory {
  createProduct() {
    return { name: 'Product A', price: 100 };
  }
}

class ProductBFactory extends ProductFactory {
  createProduct() {
    return { name: 'Product B', price: 200 };
  }
}

const factoryA = new ProductAFactory();
const productA = factoryA.createProduct();

抽象工厂模式

创建相关或依赖对象的家族:

js实现工厂

class UIFactory {
  createButton() {
    throw new Error('Method must be implemented');
  }
  createDialog() {
    throw new Error('Method must be implemented');
  }
}

class MacFactory extends UIFactory {
  createButton() {
    return { render: () => 'Mac button' };
  }
  createDialog() {
    return { show: () => 'Mac dialog' };
  }
}

class WinFactory extends UIFactory {
  createButton() {
    return { render: () => 'Windows button' };
  }
  createDialog() {
    return { show: () => 'Windows dialog' };
  }
}

const macFactory = new MacFactory();
const macButton = macFactory.createButton();

使用场景

  • 需要创建多种类似对象
  • 对象创建过程复杂
  • 需要解耦对象创建和使用
  • 需要根据不同环境创建不同对象

优缺点分析

优点:

  • 封装创建逻辑
  • 代码可扩展性强
  • 符合单一职责原则
  • 便于单元测试

缺点:

  • 可能增加代码复杂度
  • 需要创建更多类/函数
  • 对简单对象创建可能过度设计

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

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现继承

js实现继承

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

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js 实现链表

js 实现链表

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

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…