设计模式(九)之桥接模式

类的功能层次结构

现在有一个类,我们想在Something中增加新的功能,会编写一个Something的子类,即SomethingGood,想在SomethingGood上增加新的功能,又会新建一个子类SomethingBetter,这就是类的功能层次结构,随着功能的增多层次加深。
在这里插入图片描述

  • 父类具有基本功能
  • 子类中增加新的功能

类的实现层次结构

抽象类声明了一些抽象方法,定义接口,然后子类负责去实现这些抽象方法。
这里的层次结构并不是用于增加功能,而是用于实现功能任务的分组
在这里插入图片描述

  • 父类通过声明抽象方法来定义接口
  • 子类通过实现具体的方法来实现接口

什么是桥接模式

Bridge的意思是桥梁。桥梁的功能就是将河流两侧连接起来。桥接模式就是指将两样东西连接起来,他们分别是类的功能层次结构类的实现层次结构

例子

ps:例子取自https://www.liaoxuefeng.com/wiki/1252599548343744/1281319266943009#0
假设某个汽车厂商生产三种品牌的汽车:Big、Tiny和Boss,每种品牌又可以选择燃油、纯电和混合动力。如果用传统的继承来表示各个最终车型,一共有3个抽象类加9个最终子类:
在这里插入图片描述
抽象类Car

package StructuralPattern.BridgeMode;

/**
 * 汽车类
 */

public abstract class Car {
    public Engine engine;

    public Car(Engine engine){
        this.engine = engine;
    }

    public abstract void drive();
}

引擎接口

package StructuralPattern.BridgeMode;

/**
 * 引擎
 */

public interface Engine {
    void start();
}

修正类(桥接类)

package StructuralPattern.BridgeMode;

/**
 * 修正类(桥接Car和Engine)
 */

public abstract class RefinedCar extends Car{

    public RefinedCar(Engine engine){
        super(engine);
    }

    @Override
    public void drive() {
        this.engine.start();
        System.out.println("Drive "+getBrand()+" car...");
    }

    public abstract String getBrand();
}

Car子类

/**
 * BossCar
 */

public class BossCar extends RefinedCar{

    public BossCar(Engine engine){
        super(engine);
    }
    @Override
    public String getBrand() {
        return "Boss";
    }
}

Engine实现类

package StructuralPattern.BridgeMode;

/**
 * 混合型引擎
 */

public class HybridEngine implements Engine{
    @Override
    public void start() {
        System.out.println("Start Hybrid Engine...");
    }
}

结果
在这里插入图片描述

总结

采用传统的继承方法,如果要新增一个品牌,或者加一个新的引擎(比如核动力),那么子类的数量增长更快。为了避免子类数量爆炸,使用桥接模式可以很好的解决这个问题。
从上面例子很容易看出使用桥接模式,可以把汽车和引擎当作两个维度,新增汽车品牌只需增加一个修正类的子类,新增一款引擎也只需要实现引擎接口,使得Car和Engine可以自由变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值