结构型(二) - 桥接模式
一、概念
桥接模式(Bridge Pattern):是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
另一种理解方式:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。
二、实现
这里用手机和处理器的关系来举个例子,手机牌子有:华为、小米、OPPO等,处理器有:麒麟、骁龙、天玑等。两者的变化维度是相对独立的,各自进行演进,但是不同的手机品牌和不同的处理器可以组合形成不同的产品。因此,我们用桥接的方式把他们连接起来。
1、处理器接口及实现
public interface Processor {
void processorRun();
}
public class SnapdragonProcessor implements Processor{
@Override
public void processorRun() {
System.out.println("骁龙处理器开始运行");
}
}
public class KirinProcessor implements Processor{
@Override
public void processorRun() {
System.out.println("麒麟处理器开始运行");
}
}
2、手机功能实现
public abstract class MobilePhone {
private Processor processor;
public MobilePhone(Processor processor) {
this.processor = processor;
}
protected void run() {
System.out.println("开机");
processor.processorRun();
}
}
public class HuaweiPhone extends MobilePhone {
public HuaweiPhone(Processor processor){
super(processor);
}
@Override
protected void run() {
super.run();
System.out.println("华为手机运行");
}
}
public class XiaomiPhone extends MobilePhone {
public XiaomiPhone (Processor processor){
super(processor);
}
@Override
protected void run() {
super.run();
System.out.println("小米手机运行");
}
}
3、验证实现
public class Client {
public static void main(String[] args) {
KirinProcessor kirinProcessor = new KirinProcessor();
HuaweiPhone huaweiPhone = new HuaweiPhone(kirinProcessor);
huaweiPhone.run();
System.out.println("----------------------");
SnapdragonProcessor snapdragonProcessor = new SnapdragonProcessor();
XiaomiPhone xiaomiPhone = new XiaomiPhone(snapdragonProcessor);
xiaomiPhone.run();
}
}
4、结果