js实现工厂
工厂模式的概念
工厂模式是一种创建型设计模式,用于封装对象的创建逻辑,通过统一的接口动态决定实例化哪个类。在 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
抽象工厂模式实现
扩展工厂方法模式,支持创建多个相关或依赖的对象族。
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
适用场景
- 需要动态创建不同类的实例。
- 对象创建逻辑复杂或需要统一管理。
- 希望隐藏具体类的实现细节。
通过工厂模式,可以降低代码耦合度,便于后续扩展和维护。







