在JavaScript中,工厂模式是一种创建对象的设计模式,它无需指定创建对象的具体类,而是使用共同的接口来指向新创建的对象。这种模式在需要创建多个具有相似属性和方法但又不完全相同的实例时特别有用。
下面是一个使用JavaScript实现的工厂模式示例:
// 定义一个创建汽车的工厂函数
function createCar(type) {
switch (type) {
case 'sedan':
return {
type: 'Sedan',
doors: 4,
engine: {
cylinders: 4,
horsepower: 150
}
};
case 'suv':
return {
type: 'SUV',
doors: 4,
offRoadCapability: true,
engine: {
cylinders: 6,
horsepower: 250
}
};
case 'truck':
return {
type: 'Truck',
doors: 2,
towingCapacity: 5000,
engine: {
cylinders: 8,
horsepower: 350
}
};
default:
throw new Error('Unsupported car type');
}
}
// 使用工厂函数创建不同类型的汽车
const sedan = createCar('sedan');
console.log(sedan); // 输出 Sedan 类型的汽车对象
const suv = createCar('suv');
console.log(suv); // 输出 SUV 类型的汽车对象
// 尝试创建一个不支持的汽车类型
try {
const unsupportedCar = createCar('helicopter');
} catch (error) {
console.error(error.message); // 输出: Unsupported car type
}
在这个示例中,`createCar`函数是一个工厂函数,它接收一个`type`参数来决定要创建哪种类型的汽车。根据传入的`type`,函数内部使用`switch`语句来返回不同配置的汽车对象。如果传入的`type`不是工厂函数所支持的,则抛出一个错误。
这种方式的好处是,你可以在不修改工厂函数的情况下,通过添加新的`case`语句来扩展它,以支持更多类型的汽车。此外,由于工厂函数返回的是普通的JavaScript对象,这些对象可以很容易地添加额外的属性或方法,而无需修改工厂函数的实现。