桥接模式可以对多层次继承的类进行重构
多层次结构示例:
例如添加三角形状, 你需要新增两个子类, 也就是每种颜色一个; 此后新增一种新颜色需要新增三个子类, 即每种形状一个。 如此以往, 情况会越来越糟糕。
使用桥接模式进行重构:
实际上是在形状这个接口中定义一个成员变量,这个变量类型为颜色接口。
代码实现:
颜色接口:
颜色接口实现类:
图片类:
图片类中颜色作为成员变量,图片类的构造方法入参为颜色。
圆形图片实现类:
方块图片实现类:
测试类:
测试类中,颜色作为入参传入形状类的构造器中,创建了红色圆和蓝色方块两个对象;同理还可以
创建红色方块和蓝色圆两个对象。若需要增加形状和颜色,可以新增图片接口的对应形状实现类和颜色实现类即可,不需要对之前的代码进行更改。
桥接模式的应用场景
1.如果你想要拆分或重组一个具有多重功能的庞杂类 (例如能与多个数据库服务器进行交互的类), 可以使用桥接模式。
类的代码行数越多, 弄清其运作方式就越困难, 对其进行修改所花费的时间就越长。 一个功能上的变化可能需要在整个类范围内进行修改, 而且常常会产生错误, 甚至还会有一些严重的副作用。
桥接模式可以将庞杂类拆分为几个类层次结构。 此后, 你可以修改任意一个类层次结构而不会影响到其他类层次结构。 这种方法可以简化代码的维护工作, 并将修改已有代码的风险降到最低。
2.如果你希望在几个独立维度上扩展一个类, 可使用该模式。桥接建议将每个维度抽取为独立的类层次。 初始类将相关工作委派给属于对应类层次的对象, 无需自己完成所有工作。
3.如果你需要在运行时切换不同实现方法, 可使用桥接模式。当然并不是说一定要实现这一点, 桥接模式可替换抽象部分中的实现对象, 具体操作就和给成员变量赋新值一样简单。
桥接模式的优缺点
优点:
- 你可以创建与平台无关的类和程序。
- 客户端代码仅与高层抽象部分进行互动, 不会接触到平台的详细信息。
- 开闭原则。 你可以新增抽象部分和实现部分, 且它们之间不会相互影响。
- 单一职责原则。 抽象部分专注于处理高层逻辑, 实现部分处理平台细节。
缺点:
- 对高内聚的类使用该模式可能会让代码更加复杂