重要:桥接模式的核心是遵循合成复用原则,同时满足依赖倒置原则和里氏替换原则。最终实现开闭原则
汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为白色汽车、黑色汽车和红色汽车等。这种具有多个变化维度的类,就可以使用桥接模式
定义:将抽象与实现分离,使它们可以独立变化。用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度
优点:
缺点:
由于聚合关系建立在抽象层,要求开发者能识别出各个独立变化维度的抽象层,增加了系统的理解与设计难度
适用场景:
结构:
实现:
public class BridgeTest {
public static void main(String[] args) {
Color color = new WhiteColor();
Car car = new PetrolCar(color);
car.printCarInfo();
}
}
// 实现化角色: 颜色
interface Color {
public String getColor();
}
// 具体实现化角色: 白色
class WhiteColor implements Color {
public String getColor() {
return "白色";
}
}
// 抽象化角色:汽车
abstract class Car {
protected Color color;
protected Car(Color color) {
this.color = color;
}
public abstract void printCarInfo();
}
// 扩展抽象化角色: 汽油汽车
class PetrolCar extends Car {
public PetrolCar(Color color) {
super(color);
}
public void printCarInfo() {
System.out.println("这是一辆汽油汽车,颜色为:" + this.color.getColor());
}
}
运行程序,结果如下:
这是一辆汽油汽车,颜色为:白色