当前位置:首页 > JavaScript

js实现工厂

2026-03-13 19:47:47JavaScript

工厂模式的概念

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

简单工厂模式

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

js实现工厂

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

抽象工厂模式

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

js实现工厂

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实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现继承

js 实现继承

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

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…