设计模式的分类
我们都知道有 23 种设计模式,这 23 种设计模式可分为如下三类:
- 创建型模式(5 种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
- 结构型模式(7 种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
- 行为型模式(11 种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式系列文章传送门
什么是桥接模式
桥接模式就是将抽象部分和具体实现部分分离,是它们可以独立变化,又称为接口模式和柄体模式。
桥接模式的组成
- 抽象部分:定义了抽象类,并持有对实现部分接口的引用,通过构造函数传入一个实现对象。
- 具体抽象:继承抽象部分,实现其中定义的抽象方法,并通过组合关系调用实现部分的业务方法。
- 实现部分:定义具体实现的接口,供具体抽象来调用。
- 具体实现:实现实现部分接口,并实现其中的具体业务逻辑。
桥接模式案例演示
我们以手机充电线为例,同一根数据充电线既可以给小米手机充电,也可以给魅族手机充电,不同品牌的手机可以作为抽象部分,手机充电线可以作为具体实现部分。
ChargeLine(实现部分)
ChargeLine 定义了具体的充电线接口,定义了一个充电方法,代码如下:
public interface ChargeLine {
//充电
void charging();
}
ChargeLineImpl(具体实现)
ChargeLineImpl 实现了 ChargeLine 接口,实现了具体的充电方法,代码如下:
public class ChargeLineImpl implements ChargeLine {
@Override
public void charging() {
System.out.println("手机开始充电");
}
}
MobilePhone(抽象部分)
MobilePhone 定义了抽象类,并持有一个充电线接口 ChargeLine,并提供了一个具体的充电方法,代码如下:
public abstract class MobilePhone {
//实现部分
private ChargeLine chargeLine;
public MobilePhone(ChargeLine chargeLine) {
this.chargeLine = chargeLine;
}
//手机充电方法
public void mobilePhoneCharging(){
chargeLine.charging();
}
}
XiaoMiMobilePhone(具体抽象)
XiaoMiMobilePhone 继承了抽象类 MobilePhone,并调用了 MobilePhone 类的充电方法,代码如下:
public class XiaoMiMobilePhone extends MobilePhone{
public XiaoMiMobilePhone(ChargeLine chargeLine) {
super(chargeLine);
}
@Override
public void mobilePhoneCharging() {
super.mobilePhoneCharging();
}
}
ClientBridge(客户端)
在这里插入代码片
ChargeLine(实现部分)
ClientBridge 客户端完成了桥接模式调用,我们使用具体抽象对象 XiaoMiMobilePhone 传入一个实现部分对象 ChargeLineImpl 完成了桥接模式的调用, MobilePhone,并调用了 MobilePhone 类的充电方法,代码如下:
public class ClientBridge {
public static void main(String[] args) {
//手机充电线是具体实现部分
ChargeLineImpl chargeLine = new ChargeLineImpl();
//抽象的小米手机
XiaoMiMobilePhone xiaoMiMobilePhone = new XiaoMiMobilePhone(chargeLine);
//充电
xiaoMiMobilePhone.mobilePhoneCharging();
}
}
执行结果如下:
手机开始充电
桥接模式的优缺点
优点:
- 分离了抽象部分和具体实现部分,使得各自可以独立变化。
- 提升了系统的灵活性和扩展性。
缺点:
- 需要定义抽象和实现部分,提升了系统的复杂度。
- 桥接模式的使用对开发人员的设计能力有一定的要求,对团队来说是个挑战。
总结:本篇简单分享了桥接模式的使用,桥接模式的理解还是有一定的难度的,我使用了充电线的案例演示了桥接模式的实现,希望可以帮助不熟悉桥接模式的朋友。
如有不正确的地方欢迎各位指出纠正。