本文由 @胡试之 校稿。如果你也希望参与类似的系列文章翻译,可以加入我们的Java开发 和 技术翻译 小组。
简单来讲,桥接模式是一个两层的抽象。
桥接模式是用于“把抽象和实现分开,这样它们就能独立变化”。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。
1、桥接模式的故事
电视和遥控器(图中有错字)是一个完美展示两层抽象的例子。你有一个电视机的接口,还有一个遥控器的抽象类。我们都知道,将它们中任何一个定义为一个具体类都不是好办法,因为其它厂家会有不同的实现方法。
2、桥接模式Java示例代码
首先定义电视机的接口:ITV
1
2
3
4
5
|
public
interface
ITV {
public
void
on();
public
void
off();
public
void
switchChannel(
int
channel);
}
|
实现三星的 ITV 接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
class
SamsungTV
implements
ITV {
@Override
public
void
on() {
System.out.println(
"Samsung is turned on."
);
}
@Override
public
void
off() {
System.out.println(
"Samsung is turned off."
);
}
@Override
public
void
switchChannel(
int
channel) {
System.out.println(
"Samsung: channel - "
+ channel);
}
}
|
再实现索尼的ITV接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
SonyTV
implements
ITV {
@Override
public
void
on() {
System.out.println(
"Sony is turned on."
);
}
@Override
public
void
off() {
System.out.println(
"Sony is turned off."
);
}
@Override
public
void
switchChannel(
int
channel) {
System.out.println(
"Sony: channel - "
+ channel);
}
}
|
遥控器要包含对TV的引用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public
abstract
class
AbstractRemoteControl {
/**
* @uml.property name="tv"
* @uml.associationEnd
*/
private
ITV tv;
public
AbstractRemoteControl(ITV tv){
this
.tv = tv;
}
public
void
turnOn(){
tv.on();
}
public
void
turnOff(){
tv.off();
}
public
void
setChannel(
int
channel){
tv.switchChannel(channel);
}
}
|
定义遥控器的具体类。
1
2
3
4
5
6
7
8
9
10
11
|
public
class
LogitechRemoteControl
extends
AbstractRemoteControl {
public
LogitechRemoteControl(ITV tv) {
super
(tv);
}
public
void
setChannelKeyboard(
int
channel){
setChannel(channel);
System.out.println(
"Logitech use keyword to set channel."
);
}
}
|
1
2
3
4
5
6
7
|
public
class
Main {
public
static
void
main(String[] args){
ITV tv =
new
SonyTV();
LogitechRemoteControl lrc =
new
LogitechRemoteControl(tv);
lrc.setChannelKeyboard(
100
);
}
}
|
输出如下:
1
2
|
Sony: channel – 100
Logitech use keyword to
set
channel.
|
总结一下, 桥接模式允许两层实现的抽象,上面的电视机和遥控器就是很好的例子。可见,桥接模式提供了更多的灵活性。
3、Eclipse 平台上的桥接模式
在Eclipse 架构使用的模式中,桥接模式占有重要的地位。
参考文献
- Gamma, E, Helm, R, Johnson, R, Vlissides, J著: Design Patterns, 第151页. Addison-Wesley出版社, 1995
- 维基百科中的Bridge Pattern条目
译文链接: http://www.importnew.com/6857.html
[ 转载请保留原文出处、译者和译文链接。]