桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

类图示例

桥接模式.png

举个例子

手机品牌和手机软件之间的兼容

类图

手机软件桥接模式.png

代码实现

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();
}

//手机品牌N
class HandsetBrandN extends HandsetBrand {
public void Run() {
soft.Run();
}
}

//手机品牌M
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();
}
}

桥接模式包含以下几个主要角色:

  1. 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
  2. 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
  3. 实现(Implementor):定义实现接口,提供基本操作的接口。
  4. 具体实现(Concrete Implementor):实现实现接口的具体类。

模式分析

  • 优点
    1. 抽象与实现分离:提高了系统的灵活性和可维护性。
    2. 扩展能力强:可以独立地扩展抽象和实现。
    3. 实现细节透明:用户不需要了解实现细节。
  • 缺点
    1. 理解与设计难度:桥接模式增加了系统的理解与设计难度。
    2. 聚合关联:要求开发者在抽象层进行设计与编程。