桥接模式介绍
-
桥接模式(Bridge Pattern)是将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变,保持各部分的独立性以及应对他们的功能扩展。
UML类图及角色职责
-
抽象类(Abstraction):定义抽象接口,由聚合关系可知,抽象类中包含一个Implementor类型的对象,它与Implementor之间有关联关系,既可以包含抽象业务方法,也可以包含具体业务方法。
-
实现类接口(Implementor):定义实现类的接口,这个接口可以与Abstraction类的接口不同。一般而言,实现类接口只定义基本操作,而抽象类的接口还可能会做更多复杂的操作。
-
扩充抽象类(RefinedAbstraction):具体类,实现在抽象类中定义的接口,可以调用在Implementor中定义的方法。
-
具体实现类(ConcreteImplementor):具体实现了Implementor接口,在不同的具体实现类中实现不同的具体操作。
代码实现
前言:举个栗子,我们的电脑因为安装了太多软件,运行软件的时候会占内存储器,于是我们可以对我们电脑去加装内存条,我们把电脑拿到电脑城,发现技术小哥打开机箱后直接将内存条插进了一个卡槽里,这时我们发现,加装内存条如此方便,原来是之前就预留了接口,我们直接将需要的内存条插进这个接口里就可以实现动态扩展,而不需要修改整个主机。这就是设计模式之桥接模式。
实现类接口
package day07_bridge.test03;
/**
* @author coolsheep
* @date 2023/3/28 10:54
* @Describe 实现类接口
*/
public interface MemoryAPI {
//加装内存
public void add();
}
具体的实现类
package day07_bridge.test03;
/**
* @author coolsheep
* @date 2023/3/28 10:55
* @Describe 具体的实现类
*/
public class Memory8GAPI implements MemoryAPI {
@Override
public void add() {
System.out.println("我加装了8G内存");
}
}
具体的实现类
package day07_bridge.test03;
/**
* @author coolsheep
* @date 2023/3/28 10:55
* @Describe 具体的实现类
*/
public class Memory16GAPI implements MemoryAPI {
@Override
public void add() {
System.out.println("我加装了16G内存");
}
}
抽象类
package day07_bridge.test03;
/**
* 抽象类
*/
public abstract class Computer {
protected MemoryAPI memoryAPI;
public void setMemoryAPI(MemoryAPI memoryAPI) {
this.memoryAPI = memoryAPI;
}
public abstract void describe();
}
扩充的抽象类
package day07_bridge.test03;
/**
* 扩充抽象类
*/
public class PCComputer extends Computer {
@Override
public void describe() {
System.out.println("我是个人计算机");
memoryAPI.add();
}
}
扩充的抽象类
package day07_bridge.test03;
/**
* 扩充抽象类
*/
public class ServerComputer extends Computer {
@Override
public void describe() {
System.out.println("我是服务器");
memoryAPI.add();
}
}
客户端调用
package day07_bridge.test03;
//客户端调用
public class Client {
public static void main(String[] args) {
Computer pc = new PCComputer();
pc.setMemoryAPI(new Memory8GAPI());
pc.describe();
Computer server = new ServerComputer();
server.setMemoryAPI(new Memory16GAPI());
server.describe();
}
}
总结
-
实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。
-
桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。
-
桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。