很抱歉这个问题很长,还有我的英语。
我正在阅读一篇关于 DIP 的文章。我将在这里总结代码。
interface CoffeeMachine() {
void brewFilterCoffee();
}
interface EspressoMachine() {
void brewEspressoCoffee();
}
他们创建了两个不同的 CoffeeMachine。BasicCoffeeMachine 和 PremiumCoffeeMachine。它们都具有相同的功能是 brewFilterCoffee(); 所以他们把它放在CoffeeMachine界面上
class BasicCoffeeMachine implements CoffeeMachine {
@Override
void brewFilterCoffee() {
System.out.println("brewing filter coffee...");
}
}
// this one can make Espresso
class PremiumCoffeeMachine implements CoffeeMachine, EspressoMachine {
@Override
void brewFilterCoffee() {
System.out.println("brewing filter coffee but in premium way...");
}
@Override
void brewEspressoCoffee() {
System.out.println("brewing espresso coffee...");
}
}
当他们创建CoffeeApp时,它在构造函数中接受CoffeeMachine接口并使用它来prepareCoffee()
class CoffeeApp {
CoffeeMachine machine;
public CoffeeApp(CoffeeMachine machine) {
this.machine = machine;
}
public void prepareCoffee() {
machine.brewFilterCoffee();
}
}
在主班。
class Main {
public static void main(String[] args) {
PremiumCoffeeMachine premiumCoffeeMachine = new PremiumCoffeeMachine();
CoffeeApp app = new CoffeeApp(premiumCoffeeMachine);
app.brewFilterCoffee();
}
}
我在这里感到困惑,因为他们没有提到他们如何在 CoffeeApp 中使用brewEspressoCoffee()。所以我继续像这样修改CoffeeApp:
class CoffeeApp {
public void prepareFilterCoffee(CoffeeMachine machine) {
machine.brewFilterCoffee();
}
public void prepareEspressoCoffee(EspressoMachine machine) {
machine.brewEspressoCoffee();
}
}
在 Main 类中,如果我想brewEspressoCoffee(),我只需创建一个实现EspressoMachine的实例
class Main {
public static void main(String[] args) {
PremiumCoffeeMachine premiumCoffeeMachine = new PremiumCoffeeMachine();
CoffeeApp app = new CoffeeApp();
app.brewEspressoCoffee(premiumCoffeeMachine);
}
}
这还是下面的DIP吗?还有比这个例子更好的方法吗?任何示例将不胜感激。
谢谢!!