ICO 控制反转

如果 Water 改用 MineralWater 矿泉水,不用改 CoffeeMaker 的代码,只要修改注入就行。


class OrdinaryWater {
  boil() {
    console.log("普通的水烧开了!");
  }
}

class MineralWater {
  boil() {
    console.log("矿泉水烧开了!");
  }
}

class OrdinaryCoffeeBean {
  grind() {
    console.log("咖啡豆磨好了!");
  }
}

class CoffeeMaker {
  constructor() {
    this.water = new OrdinaryWater();
    this.coffeeBean = new CoffeeBean();
  }

  makeCoffee() {
    this.water.boil();
    this.coffeeBean.grind();
    console.log("咖啡做好了!☕");
  }
}

// 3. 使用 CoffeeMaker
const maker = new CoffeeMaker();
maker.makeCoffee();