桥接模式

56 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

模式分析

桥接模式(Bridge Pattern)模式又被称为接口模式,它将原本的继承关系转换为关联关系,将抽象部分和实现部分分离,使它们都可以进行独立的变化。

模式的类图如下所示,包含了如下角色

  • Abstraction:抽象类,它和接口类的关系是 has-a
  • Implementor:接口类
  • RefinedAbstraction:扩充抽象类
  • ConcreteImplementor:具体接口类

image.png 桥接模式可以看做游戏机卡带的关系,抽象类对应了Switch游戏机,接口类对应了游戏卡带,它们属于两个不同的层次结构,Switch游戏机的扩充抽象类包含了“长续航版”、“OLED版”等,游戏卡带的具体接口类包含了“塞尔达传说”、“健身环大冒险”等,游戏机需要插入对应的卡带方可运行,正如抽象类需要一个接口类对应作为构造函数的参数一样。 倘若不使用桥接模式,只用一个层次结构的继承,那么失去了has-a关系,就需要为每个游戏卡带实现一个游戏机,二者之间永久绑定,无法进行独立的变化。

桥接模式的优缺点

优点

  • 是一种多继承的解决方案,但不像多继承一样违背类的单一职责
  • 抽象类和接口类两个层次的实现可以独立变化,不会影响到对方

缺点

  • 对模型的抽象能力要求较高,需要准确的识别出系统中两个独立变化的维度

桥接模式的使用场景

正如它的优点所展示的那样,桥接模式在有两个独立变化且都需要扩展的场景中使用,例如图形库在Windows系统和Macintosh系统中Java GUI构件展示不同的效果,就是应用了使用桥接模式的Peer架构实现的。