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