描述

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

  这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
例子:总共又长方形、正方形、三角形、圆形四个形状。如果现在有需求每个形状要有红、黄、蓝,三个颜色。最能想到的是在每个形状下在创建长方形-红、长方形-黄、长方形-蓝、正方形-红、正方形-黄、正方形-蓝…..等等来进行实现。
而使用桥接模式则创建一个抽象的 颜色类。并且实现红色类,黄色类,蓝色类。
扩充的形状类存储颜色的引用对象在创建形状的时候去添加对应的颜色引用对象。

类图

image.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public interface Colour {
void desc();
}

public class Blue implements Colour {
@Override
public void desc() {
System.out.println("蓝色");
}
}
public class Red implements Colour {
@Override
public void desc() {
System.out.println("红色");
}
}
public class Yellow implements Colour
{
@Override
public void desc() {
System.out.println("黄色");
}
}
public abstract class Graphical {
private Colour colour;

public Graphical(Colour colour) {
this.colour = colour;
}

abstract void desc();
public Colour getColour(){
return colour;
}
}

public class Rectangle extends Graphical {

public Rectangle(Colour colour){
super(colour);
}
@Override
public void desc() {
System.out.println("长方形");
getColour().desc();
}
}

public class Square extends Graphical {

public Square(Colour colour){
super(colour);
}
@Override
public void desc() {
System.out.println("正方形");
getColour().desc();
}
}

public class Triangle extends Graphical {

public Triangle(Colour colour) {
super(colour);
}

@Override
public void desc() {
System.out.println("三角形");
getColour().desc();
}
}
public class Main {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(new Blue());
rectangle.desc();
}
}

image.png

优点

  1. 解耦解耦解耦解耦解耦解耦解耦
  2. 实现细节对客户透明,可以对用户隐藏实现细节

    缺点

    桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进