桥接模式是抽象部分与它的实现部分分离, 使他们可以独立的变化, 它是一种对象结构模式, 又称为柄体(handle and Body)模式或接口(Interface)模式 .桥接模式可以和适配器模式连用
例如下图的继承关系
当我想增加一个新的品牌时, 比如神州品牌, 需要同时为台式, 笔记本和平板都要添加一个类, 过程比较繁琐, 这只是3中类型, 如果更多的类型, 那么工作量时非常巨大的
这时我们可以把电脑类型和品牌看成一个坐标系:(如下图)
图中每一个x轴和y轴的交点都可以表示一种类型的品牌电脑, 我们只需要想办法把类型和品牌联系起来(桥接), 就可以按照需求把电脑组装出来, 这样就降低了维护成本, 如果我想添加一个电脑类型, 只需要在y轴添加一种即可, 添加品牌只需要在x轴添加, 然后根据自己的需要组装电脑.
Brand品牌的接口
// 品牌
public interface Brand {
void info();
}
Apple苹果品牌, 实现品牌接口Brand
// 苹果品牌
public class Apple implements Brand {
@Override
public void info() {
System.out.print("苹果"); // 打印品牌信息
}
}
Lenovo联想品牌, 实现品牌接口Brand
// 联想品牌
public class Lenovo implements Brand {
@Override
public void info() {
System.out.print("联想"); // 打印品牌信息
}
}
Computer电脑抽象类, 使用品牌和类型组装 (可以为普通类)
public abstract class Computer {
// 组合, 品牌, 起到桥接作用
protected Brand brand;
// 有参构造
public Computer(Brand brand) {
this.brand = brand;
}
// 电脑的info(), 调用品牌Brand的info()
public void info() {
brand.info();// 自带品牌
}
}
Desktop台式机类, 继承Computer抽象类
class Desktop extends Computer {
public Desktop(Brand brand) {
super(brand);
}
@Override // 重写电脑Computer的info()
public void info() {
super.info();
System.out.println("台式机");
}
}
Laptop笔记本电脑类, 继承Computer抽象类
class Laptop extends Computer {
public Laptop(Brand brand) {
super(brand);
}
@Override // 重写电脑Computer的info()
public void info() {
super.info();
System.out.println("笔记本");
}
}
测试类Test
public class Test {
public static void main(String[] args) {
// 按照需求组装出对应的电脑
// 苹果笔记本
Computer computer = new Laptop(new Apple());
computer.info();
// 联想台式机
Computer computer1 = new Desktop(new Lenovo());
computer1.info();
}
}
运行结果:
苹果笔记本
联想台式机
结构示意图: 这样电脑类型和品牌之间就建立了联系, 这就是桥接
原文:https://www.cnblogs.com/zpKang/p/13061507.html