ICO 控制反转
// 1. 自己创建所有依赖
class Water {
boil() {
console.log("水烧开了!");
}
}
class CoffeeBean {
grind() {
console.log("咖啡豆磨好了!");
}
}
// 2. CoffeeMaker 自己管理依赖
class CoffeeMaker {
constructor() {
this.water = new Water(); // 自己 new 水
this.coffeeBean = new CoffeeBean(); // 自己 new 咖啡豆
}
makeCoffee() {
this.water.boil();
this.coffeeBean.grind();
console.log("咖啡做好了!☕");
}
}
// 3. 使用 CoffeeMaker
const maker = new CoffeeMaker();
maker.makeCoffee();
问题:
- 如果 Water 或 CoffeeBean 变了(比如改用 MineralWater 矿泉水),必须改 CoffeeMaker 的代码!
- 测试时很难替换依赖(比如用 MockWater 模拟测试)。