桥接模式(Bridge)
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式(Handle and Body)或接口模式(Interface)
模式动机
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了
桥接模式的作用:用来处理多种维度变化的问题
桥接模式的实现
这里以电脑类型和品牌为例实现解耦,可以各种扩展互不影响。首先创建品牌接口,再创建两个实现品牌的类,然后创建一个类型类,最后创建两个具体类型类。其实就是在Computer中添加了桥接
UML类图:
UML中类之间的六大关系_Big Bird的博客-CSDN博客_uml关系
具体代码实现:
//抽象出一个品牌的接口
public interface Brand {
void info();
}
//苹果品牌
public class Apple implements Brand {
@Override
public void info() {
System.out.println("苹果品牌");
}
}
//联想品牌
public class Lenovo implements Brand {
@Override
public void info() {
System.out.println("联想品牌");
}
}
//抽象的电脑类型类
public abstract class Computer {
//使用组合
protected Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
public void info() {
//自带品牌
brand.info();
}
}
//台式机
class Desktop extends Computer{
public Desktop(Brand brand) {
super(brand);
}
@Override
public void info() {
super.info();
System.out.println("台式机");
}
}
//笔记本
class Laptop extends Computer{
public Laptop(Brand brand) {
super(brand);
}
@Override
public void info() {
super.info();
System.out.println("笔记本");
}
}
测试一下
public class Test {
public static void main(String[] args) {
//苹果笔记本
Computer computer = new Laptop(new Apple());
computer.info();
//联想台式机
Computer computer2 = new Desktop(new Lenovo());
computer2.info();
}
}
桥接模式的优缺点
桥接模式与适配器模式
适配器模式解决兼容问题,桥接模式解决功能扩展问题