桥接模式

设计模式/结构型设计模式

简述

用于把抽象化与实现化解藕,使二者可以独立变化

使用场景

当一个类存在两个独立变化的维度时,为了减少因继承结构带来的具体类数量,
可将变化的维度进行抽象化,再用关联方式将其联系起来

UML 图

实例

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
@Getter
public abstract class Color {
private String name;
public Color(String name) {
this.name = name;
}
}
// 橘色
public class OrangeColor extends Color {
public OrangeColor(String name) {
super(name);
}
}
// 白色
public class WhiteColor extends Color {
public WhiteColor(String name) {
super(name);
}
}

@Getter
public abstract class OrangeCat extends Cat {
private Color color;
public OrangeCat(Color color) {
this.color = color;
}
}

// 小猫
public class KittenCat extends OrangeCat {

public KittenCat(Color color) {
super(color);
}
}

// 成年猫
public class AdultCat extends OrangeCat {

public AdultCat(Color color) {
super(color);
}
}

// 客户端
@Slf4j
public class Client {
public static void main(String[] args) {
OrangeCat kittenCat1 = new KittenCat(new OrangeColor("橘色"));
OrangeCat kittenCat2 = new KittenCat(new WhiteColor("橘白相间的"));
OrangeCat adultCat = new AdultCat(new WhiteColor("橘白相间的"));
log.debug("kittenCat1 颜色: " + kittenCat1.getColor().getName());
log.debug("kittenCat2 颜色: " + kittenCat2.getColor().getName());
log.debug("adultCat 颜色: " + adultCat.getColor().getName());
}
}