Bridge桥接模式
what
桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。
why
扩展子类时,组合类的数量将以几何级数增长。
structure

how
具体例子:点咖啡
添加剂接口以及具体实现类
interface Toppings {
String addTopping();
}
// 具体的实现类:加糖
class Sugar implements Toppings {
@Override
public String addTopping() {
return "加糖";
}
}
// 具体的实现类:加牛奶
class Milk implements Toppings {
@Override
public String addTopping() {
return "加牛奶";
}
}
定义咖啡的抽象接口()
public abstract class Coffee {
protected Toppings toppings;
public Coffee(Toppings toppings) {
this.toppings = toppings;
}
public abstract void makeCoffee();
}
public class LargeCup extends Coffee {
public LargeCup(Toppings toppings) {
super(toppings);
}
@Override
public void makeCoffee() {
System.out.println("制作一杯大杯咖啡");
toppings.addTopping();
}
}
public class SmallCup extends Coffee {
public SmallCup(Toppings toppings) {
super(toppings);
}
@Override
public void makeCoffee() {
System.out.println("制作一杯小杯咖啡");
toppings.addTopping();
}
}
public class MediumCup extends Coffee {
public MediumCup(Toppings toppings) {
super(toppings);
}
@Override
public void makeCoffee() {
System.out.println("制作一杯中杯咖啡");
toppings.addTopping();
}
}
使用这些类来制作特定口味和大小的咖啡:
public static void main(String[] args) {
Toppings sugar = new Sugar();
Toppings milk = new Milk();
Coffee largeCupWithSugar = new LargeCup(sugar);
largeCupWithSugar.makeCoffee();
Coffee smallCupWithMilk = new SmallCup(milk);
smallCupWithMilk.makeCoffee();
Coffee mediumCupWithSugarAndMilk = new MediumCup(sugar);
mediumCupWithSugarAndMilk.makeCoffee();
}
when
- 拆分或重组一个具有多重功能的庞杂类 (例如能与多个数据库服务器进行交互的类)
- 在几个独立维度上扩展一个类; 在运行时切换不同实现方法;
P&Cs
P:
- 你可以创建与平台无关的类和程序。
- 客户端代码仅与高层抽象部分进行互动, 不会接触到平台的详细信息。
- 开闭原则。 你可以新增抽象部分和实现部分, 且它们之间不会相互影响。
- 单一职责原则。 抽象部分专注于处理高层逻辑, 实现部分处理平台细节。
C:
- 高内聚的类使用该模式可能会让代码更加复杂。
summary
桥接模式在处理跨平台应用、 支持多种类型的数据库服务器或与多个特定种类 (例如云平台和社交网络等) 的 API 供应商协作时会特别有用。