桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。
桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。
类图示例

举个例子
手机品牌和手机软件之间的兼容
类图

代码实现
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| abstract class HandsetSoft { public abstract void Run(); }
class HandsetGame extends HandsetSoft { public void Run() { System.out.println("运行手机游戏"); } }
class HandsetAddressList extends HandsetSoft { public void Run() { System.out.println("运行手机通讯录"); } }
abstract class HandsetBrand { protected HandsetSoft soft;
public void setHandsetSoft(HandsetSoft soft) { this.soft = soft; }
public abstract void Run(); }
class HandsetBrandN extends HandsetBrand { public void Run() { soft.Run(); } }
class HandsetBrandM extends HandsetBrand { public void Run() { soft.Run(); } }
public class Bridge { public static void main(String[] args) { HandsetBrand ab; ab = new HandsetBrandN(); ab.setHandsetSoft(new HandsetGame()); ab.Run(); ab.setHandsetSoft(new HandsetAddressList()); ab.Run(); ab = new HandsetBrandM(); ab.setHandsetSoft(new HandsetGame()); ab.Run(); ab.setHandsetSoft(new HandsetAddressList()); ab.Run(); } }
|
桥接模式包含以下几个主要角色:
- 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
- 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
- 实现(Implementor):定义实现接口,提供基本操作的接口。
- 具体实现(Concrete Implementor):实现实现接口的具体类。
模式分析
- 优点
- 抽象与实现分离:提高了系统的灵活性和可维护性。
- 扩展能力强:可以独立地扩展抽象和实现。
- 实现细节透明:用户不需要了解实现细节。
- 缺点
- 理解与设计难度:桥接模式增加了系统的理解与设计难度。
- 聚合关联:要求开发者在抽象层进行设计与编程。