桥接模式

  • 为了避免直接继承带来的子类爆炸

  • 将抽象与实现解耦,让它们可以独立变化
    桥接模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    abstract class Car {
    constructor(engine) {
    this.engine = engine
    }
    drive()
    }

    class Engine {
    start()
    }

    abstract class RefinedCar extends Car {
    constructor(engine) {
    super(engine)
    }
    drive() {
    this.engine.start()
    }
    getBrand();
    }

    class BossCar extends RefinedCar {
    constructor(engine) {
    super(engine)
    }
    getBrand() {
    return 'boss'
    }
    }

    class HybridEngine implements Engine {
    start() {
    console.log('hybrid engine start')
    }
    }

    // 使用
    let car = new BossCar(new HybridEngine())
    car.drive()
    // 这里面的桥指的是 Car 与 Engine之间的桥
  • 缺点:对高内聚的类使用该模式可能会使代码更复杂

适配器模式对比

  • 适配器模式主要解决两个已经有接口间的匹配问题,主要是适配
  • 桥接模式主要是构建桥梁,桥两边的都可以灵活改变
  • 主要用于的软件开发时机不一样,桥接模式通常用于开发前期,适配器模式通常用于对已有的使用时期,通常不会对原有的接口做改变