当前位置:首页 > JavaScript

js实现工厂

2026-01-31 21:45:27JavaScript

工厂模式的概念

工厂模式是一种创建型设计模式,用于封装对象的创建逻辑,通过统一的接口动态决定实例化哪个类。在 JavaScript 中,工厂模式常用于解耦对象创建过程,提升代码的可维护性和扩展性。

简单工厂模式实现

通过一个函数集中处理不同对象的创建逻辑,根据输入参数返回不同的实例。

function createProduct(type) {
  switch (type) {
    case 'A':
      return new ProductA(); // 假设 ProductA 是已定义的类
    case 'B':
      return new ProductB();
    default:
      throw new Error('Unknown product type');
  }
}

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

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

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

工厂方法模式实现

定义抽象工厂接口,由子类决定具体实例化的对象类型。

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

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

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

// 使用示例
const factoryA = new ConcreteFactoryA();
const productA = factoryA.createProduct();
console.log(productA.operation()); // 输出: Product A

抽象工厂模式实现

扩展工厂方法模式,支持创建多个相关或依赖的对象族。

js实现工厂

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

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

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

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

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

适用场景

  • 需要动态创建不同类的实例。
  • 对象创建逻辑复杂或需要统一管理。
  • 希望隐藏具体类的实现细节。

通过工厂模式,可以降低代码耦合度,便于后续扩展和维护。

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

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 实现继承

js 实现继承

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

js 实现链表

js 实现链表

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…