桥接模式

……

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
package org.sang.plugins.shejimoshi;

/**
* 桥接模式是为了使不同维度的变量独立变化的而不相互影响的设计模式
*
* 例如绿茶红茶和大杯小杯有不同的维度,如果根据排列组合,会生成4个类,并且若杯大小和茶种类各增加一个时,所产生的类高达9种,桥接模式便可以解决这类问题。
*/
public class Tea {
public static void main(String[] args) {
//客户端中只需分别指定杯大小和茶种类即可算出价格:
TeaSize teaSize = new BigCup(new GreenTea());
System.out.println(teaSize.getPrice());
}
}

/**
* 分析上述情况,首先定义一个茶种类接口:
*/
interface TeaKind {
double getPrice();
}

/**
* 以及其实现类,其中包括了红茶的单位价格:
*/
class RedTea implements TeaKind {
private final double PRICE = 4;

@Override
public double getPrice() {
return PRICE;
}
}

/**
* 以及其实现类,其中包括了红茶的单位价格:
*/
class GreenTea implements TeaKind {
private final double PRICE = 5;

@Override
public double getPrice() {
return PRICE;
}
}

/**
* 其次定义茶杯大小接口:
*/
interface TeaSize {
double getPrice();
}

/**
* 其实现类,其中调用了TeaKind的getPrice方法用于计算价格:
*/
class BigCup implements TeaSize {
private TeaKind teaKind;

public BigCup(TeaKind teaKind) {
this.teaKind = teaKind;
}

@Override
public double getPrice() {
return teaKind.getPrice() * 2;
}
}