Java设计模式之桥接模式

1. 桥接模式

重要:桥接模式的核心是遵循合成复用原则,同时满足依赖倒置原则和里氏替换原则。最终实现开闭原则

汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为白色汽车、黑色汽车和红色汽车等。这种具有多个变化维度的类,就可以使用桥接模式

1.1 定义、优缺点、适用场景

定义:将抽象与实现分离,使它们可以独立变化。用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度

优点

  • 抽象与实现分离,扩展能力强
  • 符合开闭原则
  • 符合合成复用原则
  • 其实现细节对客户透明

缺点
由于聚合关系建立在抽象层,要求开发者能识别出各个独立变化维度的抽象层,增加了系统的理解与设计难度

适用场景

  • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时
  • 一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加
  • 一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时

1.2 模式的结构与实现

结构

  • 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。即颜色
  • 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。比如白色
  • 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。即汽车
  • 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。比如汽油汽车

实现

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());
    }
}

运行程序,结果如下:

这是一辆汽油汽车,颜色为:白色

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...