返回

面向对象设计模式之桥接模式:突破限制,咖啡也能定制化

Android

引言

在面向对象编程中,设计模式为解决常见编程问题提供了可重用且有效的解决方案。其中,桥接模式是一种结构型设计模式,它将一个类的接口和实现解耦,使得两者可以独立变化。

天庭咖啡厅的咖啡系统

天庭咖啡厅的点咖啡系统最初的设计过于简单,只允许顾客选择大杯原味或加糖咖啡。然而,随着顾客口味的多样化和定制化需求的增加,这种设计模式的局限性显露无疑。

桥接模式的引入

为了解决这个问题,哮天犬引入了桥接模式。他将咖啡的制作和调味分离为两个独立的类层次结构:

  • 制作咖啡的抽象类: 定义了制作咖啡的一般步骤,如研磨咖啡豆、萃取咖啡液等。
  • 制作咖啡的具体类: 实现了抽象类中定义的步骤,但采用不同的制作方法。例如,摩卡壶制作咖啡和虹吸壶制作咖啡就是两种不同的具体类。
  • 调味咖啡的抽象类: 定义了给咖啡调味的一般步骤,如加糖、加奶精等。
  • 调味咖啡的具体类: 实现了抽象类中定义的步骤,但采用不同的调味方式。例如,原味咖啡和加糖咖啡就是两种不同的具体类。

桥接模式的优势

桥接模式的引入带来了以下优势:

  • 灵活性: 系统可以轻松添加新的咖啡制作或调味方法,而无需修改现有代码。
  • 解耦: 制作咖啡和调味咖啡的类层次结构是解耦的,可以独立变化和扩展。
  • 可扩展性: 系统可以轻松扩展,以支持更复杂和定制化的咖啡制作和调味需求。

示例代码

以下是桥接模式在咖啡系统中的示例代码:

// 制作咖啡的抽象类
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();
    }
}

结语

桥接模式为天庭咖啡厅的点咖啡系统带来了极大的灵活性、解耦和可扩展性。通过分离咖啡的制作和调味,系统可以轻松适应不断变化的业务需求,为顾客提供更加定制化和满意的咖啡体验。