桥接模式 Bridge Pattern
介绍
- 用于把抽象化与实现化解耦
- 使得二者可以独立变化
示例
我们要画图形

涉及到颜色和形状,可能会这样画👇
class ColorShape { yellowCircle() { console.log(`draw yellow circle`) } greenCircle() { console.log(`draw green circle`) } yellowTriangle() { console.log(`draw yellow Triangle`) } greenTriangle() { console.log(`draw green Triangle`) }}
const draw = new ColorShape();draw.yellowCircle()draw.greenCircle()draw.yellowTriangle()draw.greenTriangle()如果我们想把颜色和图形分离开,可以这样👇🏻

class Color { constructor(colorName) { this.colorName = colorName }}
class Shape { constructor(shapeName) { this.shapeName = shapeName }}
class Draw { constructor(color, shape) { this.color = color this.shape = shape } draw() { console.log(this.color.colorName, this.shape.shapeName) }}
const yellow = new Color('yellow')const green = new Color('green')const circle = new Shape('circle')const triangle = new Shape('triangle')const yellowCircle = new Draw(yellow, circle)yellowCircle.draw()const greenTriangle = new Draw(green, triangle)greenTriangle.draw()如果以后颜色有九九八十一种的话,第一种方式我们就要写…😥老长,并且每次都需要修改 ColorShape 类。利用桥接模式后复杂性就会大大降低,可灵活组合。
class Color { constructor(colorName) { this.colorName = colorName }}
class Shape { constructor(shapeName) { this.shapeName = shapeName }}
class Draw { constructor(color, shape) { this.color = new Color(color) this.shape = new Shape(shape) } draw() { console.log(this.color.colorName, this.shape.shapeName) }
getColor() { console.log(this.color.colorName) }
getShape() { console.log(this.shape.shapeName) }}
const yellowCircle = new Draw('yellow', 'circle')yellowCircle.draw()const greenTriangle = new Draw('green', 'triangle')greenTriangle.draw()设计原则验证
- 抽象和实现分离,解耦
- 符合开放封闭原则