返回
面向对象设计模式之桥接模式:突破限制,咖啡也能定制化
Android
2023-11-23 14:37:47
引言
在面向对象编程中,设计模式为解决常见编程问题提供了可重用且有效的解决方案。其中,桥接模式是一种结构型设计模式,它将一个类的接口和实现解耦,使得两者可以独立变化。
天庭咖啡厅的咖啡系统
天庭咖啡厅的点咖啡系统最初的设计过于简单,只允许顾客选择大杯原味或加糖咖啡。然而,随着顾客口味的多样化和定制化需求的增加,这种设计模式的局限性显露无疑。
桥接模式的引入
为了解决这个问题,哮天犬引入了桥接模式。他将咖啡的制作和调味分离为两个独立的类层次结构:
- 制作咖啡的抽象类: 定义了制作咖啡的一般步骤,如研磨咖啡豆、萃取咖啡液等。
- 制作咖啡的具体类: 实现了抽象类中定义的步骤,但采用不同的制作方法。例如,摩卡壶制作咖啡和虹吸壶制作咖啡就是两种不同的具体类。
- 调味咖啡的抽象类: 定义了给咖啡调味的一般步骤,如加糖、加奶精等。
- 调味咖啡的具体类: 实现了抽象类中定义的步骤,但采用不同的调味方式。例如,原味咖啡和加糖咖啡就是两种不同的具体类。
桥接模式的优势
桥接模式的引入带来了以下优势:
- 灵活性: 系统可以轻松添加新的咖啡制作或调味方法,而无需修改现有代码。
- 解耦: 制作咖啡和调味咖啡的类层次结构是解耦的,可以独立变化和扩展。
- 可扩展性: 系统可以轻松扩展,以支持更复杂和定制化的咖啡制作和调味需求。
示例代码
以下是桥接模式在咖啡系统中的示例代码:
// 制作咖啡的抽象类
interface CoffeeMaker {
void grindBeans();
void brewCoffee();
}
// 制作咖啡的具体类(摩卡壶)
class MokaPotCoffeeMaker implements CoffeeMaker {
@Override
public void grindBeans() {
// ...
}
@Override
public void brewCoffee() {
// ...
}
}
// 制作咖啡的具体类(虹吸壶)
class VacuumCoffeeMaker implements CoffeeMaker {
@Override
public void grindBeans() {
// ...
}
@Override
public void brewCoffee() {
// ...
}
}
// 调味咖啡的抽象类
interface CoffeeFlavor {
void addSugar();
void addMilk();
}
// 调味咖啡的具体类(原味咖啡)
class OriginalCoffeeFlavor implements CoffeeFlavor {
@Override
public void addSugar() {
// ...
}
@Override
public void addMilk() {
// ...
}
}
// 调味咖啡的具体类(加糖咖啡)
class SugarCoffeeFlavor implements CoffeeFlavor {
@Override
public void addSugar() {
// ...
}
@Override
public void addMilk() {
// ...
}
}
// 桥接模式
class Coffee {
private CoffeeMaker coffeeMaker;
private CoffeeFlavor coffeeFlavor;
public Coffee(CoffeeMaker coffeeMaker, CoffeeFlavor coffeeFlavor) {
this.coffeeMaker = coffeeMaker;
this.coffeeFlavor = coffeeFlavor;
}
public void makeCoffee() {
coffeeMaker.grindBeans();
coffeeMaker.brewCoffee();
coffeeFlavor.addSugar();
coffeeFlavor.addMilk();
}
}
结语
桥接模式为天庭咖啡厅的点咖啡系统带来了极大的灵活性、解耦和可扩展性。通过分离咖啡的制作和调味,系统可以轻松适应不断变化的业务需求,为顾客提供更加定制化和满意的咖啡体验。