1, 什么是桥接
桥, 提供给两方, 或者多方相交汇的作用,
例如, A 函数想调用 B 函数,
常见的方法就是, 直接在A 中显式 调用B, 这样存在高耦合, 如果我们使用一个中间函数C, 在C里面显调用A, 再调用B, 像是这样
1.1 A -> B
1.2 C -> A -> B
A B 耦合就解开了,
1.3 更抽象的理解使用, 比如从数据库里面的数据, 怎么就变成了 Java 中的对象呢? 这中间肯定就有桥接模式的使用, 有很多很多的桥, 将数据库里面的数据, 解析成了Java 对象
2, 优缺点
2.1 解耦合, 如同第一点中所说的 , A 和 B 之间实现了解耦合
2.2 代码更加面向对象, 说白了, 写的代码牛逼
2.3 通过桥接模式可以实现不同接口直接的数据转换
2.4 A 和 B 虽然解了耦合, 但如果我 A 调完 B 我还要执行 A 中的一些代码怎么办, 就需要对A 函数就行拆分封装, 如果A里面很多调用的话, 就增加了代码的复杂程度, 越复杂, 等同于增加了, 代码维护性, 使用之前先考虑考虑
3, 代码示例
// 抽象桥
public interface IBridge {
// 将hdmi 信号转换成vga
boolean HdmiToVga(IHdmi hdmi, IVga vga);
}
// 实例桥
public class Bridge implements IBridge {
@Override
public boolean HdmiToVga(IHdmi hdmi, IVga vga) {
String data = hdmi.getData();
System.out.println("对数据进行转换:" + data);
vga.setData(data);
return false;
}
}
// 抽象HDMI 协议
public interface IHdmi {
String getData();
boolean setData(String data);
}
// 实例HDMI 信号协议
public class Hdmi implements IHdmi {
private String data;
@Override
public String getData() {
return data;
}
@Override
public boolean setData(String data) {
this.data = data;
return true;
}
}
// 抽象Vga 协议
public interface IVga {
String getData();
boolean setData(String data);
}
// 实例Vga
public class Vga implements IVga {
private String data;
@Override
public String getData() {
return data;
}
@Override
public boolean setData(String data) {
System.out.println("VGA 成功接收了数据: " + data);
this.data = data;
return true;
}
}
public static void main(String[] args) {
IBridge bridge = new Bridge();
IHdmi hdmi = new Hdmi();
hdmi.setData("hello vga");
IVga vga = new Vga();
bridge.HdmiToVga(hdmi, vga);
System.out.println(vga.getData());
}
//=========================
对数据进行转换:hello vga
VGA 成功接收了数据: hello vga
hello vga