工厂模式(Factory Pattern)
工厂模式是一个可以批量产出特定场景下“需求”的总承,只需要知道输入的**“原材料**”应该是什么,然后得到与原材料对应的“成品”。
工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象,用工厂方法代替new操作的一种模式。
示例:
class SuzukiCar{
constructor(color){
this.color = color;
this.brand = 'Suzuki';
}
}
class HondaCar{
constructor(color){
this.color = color;
this.brand = 'Honda';
}
}
class BMWCar{
constructor(color){
this.color = color;
this.brand = 'BMW';
}
}
// 汽车品牌枚举
const BRANDS = {
suzuki: 1,
honda: 2,
bmw: 3
}
class CarFactory{
create(brand, color){
switch(brand){
case BRANDS.suzuki:
return new SuzukiCar(color);
case BRANDS.honda:
return new HondaCar(color);
case BRANDS.bmw:
return new BMWCar(color);
default:
break;
}
}
}
const carFactory = new CarFactory();
const cars = [];
cars.push(carFactory.create(BRANDS.suzuki, 'brown'));
cars.push(carFactory.create(BRANDS.honda, 'grey'));
cars.push(carFactory.create(BRANDS.bmw, 'red'));
function say() {
console.log(`Hi, I am a ${this.color} ${this.brand} car`);
}
for (const car of cars) {
say.call(car);
}
小结:
- 构造函数和创建者分离,对new操作进行封装
- 符合开放封闭原则