理解23种设计模式-创建模式-桥接模式

桥接模式是一种设计模式,旨在将抽象与实现分离,降低两者之间的耦合度,增强系统扩展能力。文章介绍了桥接模式的概念、优点,以及与适配器模式的区别。通过汽车品牌和发动机类型为例,展示了如何在实际场景中应用桥接模式,以减少因分类增多导致的子类爆炸问题。
摘要由CSDN通过智能技术生成

桥接模式介绍
桥接模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

优点
抽象与实现分离,扩展能力强
符合开闭原则
符合合成复用原则

缺点
由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度

适配器模式的实现
结构

抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

应用场景
现在家家都有汽车,汽车又有很多牌子,并且还有很多种发动机(用电,用油的还有混合的)
正常做分类

                /纯电的宝马汽车
       /奔驰牌汽车-燃油的奔驰汽车
      /          \混合的奔驰汽车
     /
    / 		  /纯电的宝马汽车
汽车 -宝马牌汽车-燃油的宝马汽车
			  \混合的宝马汽车

发现只有两个牌子就有六个最终的子类,车子多起来子类会非常的多,我们使用桥接模式,把发动机当作实现化角色分离出来

抽象化角色:车
扩展抽象化角色:不同品牌的车
实现化角色:发动机
具体实现化角色:不同的发动机

public class CarTest {
    public static void main(String[] args) {
        Car car = new BossCar(new FuelOilEngine());
        car.drive();

    }
}

//发动机  实现化角色,扩展抽象化角色调用
interface Engine {
    void start();
}
//燃油发动机 具体实现化角色, 给实现化角色接口的具体实现
class FuelOilEngine implements Engine{
    @Override
    public void start() {
        System.out.println("这是燃油发动机...");
    }
}

//车 抽象化角色里面有一个实现化对象的引用
abstract class Car{
    protected Engine engine;
    public Car(Engine engine){
        this.engine = engine;
    }
    public abstract void drive();
}
//用油的车 扩展抽象化 扩展父类的业务方法
 class BossCar extends Car{
    public BossCar(Engine engine) {
        super(engine);
    }
    @Override
    public void drive() {
        System.out.println("开着奔驰牌子的车...");
        this.engine.start();
    }
}

输出结果
开着奔驰牌子的车…
这是燃油发动机…

小结
桥接模式通过分离一个抽象接口和它的实现部分,使得设计可以按两个维度独立扩展。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值