JavaScript设计模式 -- 工厂模式

在实际开发中,我们经常会遇到需要根据不同场景生成不同对象的情况。为了解决对象创建与使用之间的耦合问题,工厂模式应运而生。本文将以 JavaScript 为例,从简单工厂到工厂方法,再到抽象工厂,介绍工厂模式的多种实现方式,并通过多个场景的示例代码,帮助大家更好地理解和应用这一设计模式。

工厂模式简介

工厂模式属于创建型设计模式,其核心思想是将对象的创建过程封装起来,让调用者只需关注产品接口,而无需了解具体实现。这样可以降低系统各模块之间的耦合度,使得扩展和维护更加方便。

根据具体需求,工厂模式常见的变体包括:

  • 简单工厂模式:由一个工厂类根据参数创建不同的产品实例;
  • 工厂方法模式:通过定义抽象工厂接口,让子类决定实例化哪一个具体产品;
  • 抽象工厂模式:用于创建一系列相关或相互依赖的产品。

接下来,我们分别介绍这些模式在 JavaScript 中的实现,并结合多种场景给出示例。


简单工厂模式

简单工厂模式将产品的创建逻辑集中在一个工厂方法中,根据传入参数返回相应的产品实例。适用于产品种类较少、逻辑简单的场景。

示例 1:产品选择

假设我们需要根据用户输入创建不同的产品对象,可以这样实现:

// 定义具体产品类
class ProductA {
  use() {
    console.log('使用产品 A');
  }
}

class ProductB {
  use() {
    console.log('使用产品 B');
  }
}

// 简单工厂类
class SimpleFactory {
  static createProduct(type) {
    switch (type.toLowerCase()) {
      case 'a':
        return new ProductA();
      case 'b':
        return new ProductB();
      default:
        throw new Error(`不支持的产品类型: ${type}`);
    }
  }
}

// 客户端调用
const product = SimpleFactory.createProduct('a');
product.use(); // 输出:使用产品 A

示例 2:几何图形

在图形绘制应用中,我们可能需要生成不同的几何图形对象,如圆形、正方形和三角形。简单工厂可以帮助我们根据形状名称动态创建对应实例。

// 定义图形基类
class Shape {
  draw() {
    throw new Error('抽象方法不能直接调用');
  }
}

class Circle extends Shape {
  draw() {
    console.log('绘制圆形');
  }
}

class Square extends Shape {
  draw() {
    console.log('绘制正方形');
  }
}

class Triangle extends Shape {
  draw() {
    console.log('绘制三角形');
  }
}

// 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鎈卟誃筅甡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值