乐趣区

JS设计模式–Factory(工厂)模式

工厂模式
提供一个通用的接口来创建对象
示例
//Car 构造函数
function Car(option) {
this.doors = option.doors || 4
this.color = option.color || ‘red’
this.state = option.state || ‘brand new’
}

//Truck 构造函数
function Truck(option) {
this.color = option.color || ‘blue’
this.wheelSize = option.wheelSize || ‘large’
this.state = option.state || ‘used’
}

//Vehicle 工厂
function VehicleFactory() {}

VehicleFactory.prototype.vehicleClass = Car
VehicleFactory.prototype.createVehicle = function(option) {
if(option.vehicleType == ‘car’) {
this.vehicleClass = Car
}else {
this.vehicleClass = Truck
}

return new this.vehicleClass(option)
}

// 创建生成汽车的工厂实例
var carFactory = new VehicleFactory()
var car = carFactory.createVehicle({
vehicleType: ‘car’,
color: ‘yellow’,
doors: 6
})

console.log(car instanceof Car)
console.log(car)
//true
//Car {doors: 6, color: “yellow”, state: “brand new”}

var movingTruck = carFactory.createVehicle({
vehicleType: ‘truck’,
color: ‘red’,
state: ‘like new’,
wheelSize: ‘small’
})

console.log(movingTruck instanceof Truck)
console.log(movingTruck)
//true
//Truck {color: “red”, state: “like new”, wheelSize: “small”}
适用场景

当对象或组建设置涉及高复杂性时
当需要根据所在当不同环境轻松生成对象当不同实例时
当处理很多共享相同属性当小型对象或组件时
在编写只需要满足一个 API 契约(亦称鸭子类型)的其他对象的实例对象时。对解耦是很有用对。

JS 设计模式系列文章
JS 设计模式之 Factory(工厂)模式 JS 设计模式之 Singleton(单例)模式 JS 设计模式之 Facade(外观)模式 JS 设计模式之 Module(模块)模式、Revealing Module(揭示模块)模式

退出移动版