设计实现

桥接模式,通过将一个相关的大类,拆分出抽象和实现两个层次,两个层次相互独立,抽象为通用的接口,各个实现类可根据自己的实际情况,采用不同的技术细节实现通用接口功能。

比如:在设计一套GUI组件时,需要对不同的操作系统作适配

  • 传统方式:针对不同的系统,各自设计一套组件;针对红色按钮、蓝色按钮、白色按钮,各自写一套代码去实现。
  • 桥接模式:针对GUI所要包含的组件,拆分抽象和实现两个层次;设计一套通用接口,不同的操作系统只需要实现接口要求的功能,不同操作系统上的使用者使用相同的代码,即可得到想要的组件。

具体实现

控制电视机、收音机,需要不同的控制器,且同一种设备的控制器仍然不同,比如a厂家的控制比较高级,功能多,能控制电视机闪烁;b厂家的控制器比较基础,只能控制开关。

Device-抽象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.lcf.demo.pattern.bridge.devices;

public interface Device {

void open();

void down();

boolean isOpen();

int getChannel();

void setChannel(int channel);

void printStatus();
}

RadioDevice-收音机设备

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
package com.lcf.demo.pattern.bridge.devices;

public class RedioDevice implements Device{
int channel = 0;
boolean open = false;

@Override
public void open() {
this.open=true;
System.out.println("open the radio");
}

@Override
public void down() {
System.out.println("shutdown the radio");
}

@Override
public boolean isOpen() {
return open;
}

@Override
public int getChannel() {
return 0;
}

@Override
public void setChannel(int channel) {
this.channel=channel;
}

@Override
public void printStatus() {
System.out.println("radio channel is"+ open);
}
}

TVDevice-电视机设备

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
package com.lcf.demo.pattern.bridge.devices;

public class TVDevice implements Device{
int channel=50;

boolean open=false;

@Override
public void open() {
this.open=true;
System.out.println("open the tv");
}

@Override
public void down() {
this.open=false;
System.out.println("close the tv");
}

@Override
public boolean isOpen() {
return open;
}

@Override
public int getChannel() {
return channel;
}

@Override
public void setChannel(int channel) {
this.channel=channel;
}

@Override
public void printStatus() {
System.out.println("the tv status is"+open);
}
}

Remote-控制器

1
2
3
4
5
6
7
8
package com.lcf.demo.pattern.bridge.remotes;

public interface Remote {
void power();

void shudown();
}


BasicRemote-基础控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.lcf.demo.pattern.bridge.remotes;

import com.lcf.demo.pattern.bridge.devices.Device;

public class BaseRemote implements Remote{
private Device device;

public BaseRemote(Device device){
this.device=device;
}

@Override
public void power() {
device.open();
}

@Override
public void shudown() {
device.down();
}


}

AdviceRemote-高级控制器

可在基础控制器基础上,进一步扩展高级功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.lcf.demo.pattern.bridge.remotes;

import com.lcf.demo.pattern.bridge.devices.Device;

public class AdvanceRemote extends BaseRemote{
public AdvanceRemote(Device device) {
super(device);
}
public void play(){
super.power();
super.shudown();
}
}