栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 设计模式之【桥接】学习与掌握

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 设计模式之【桥接】学习与掌握

文章目录
  • 定义
  • 优点
  • 缺点
  • 桥接模式的结构与实现
    • 模式的结构
    • 模式的实现
  • 应用场景

定义
  • 将抽象与实现分离,使它们可以独立变化。

它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。


优点
  • 符合开闭原则
  • 符合合成复用原则
  • 其实现细节对客户透明
  • 抽象与实现分离,扩展能力强

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

桥接模式的结构与实现

将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。

模式的结构

该模式主要包含以下角色:

  • 【抽象化角色】- 定义一个抽象类,并包含一个对实现化角色对象的引用
  • 【扩展抽象化角色】- 是抽象化角色的子类,实现父类中定义的抽象业务方法,并通过组合关系调用实现化角色中的方法
  • 【实现化角色】- 定义实现化角色接口,供扩展抽象化角色调用
  • 【具体实现化角色】- 给出实现化角色接口的具体实现

模式的实现

实现化接口角色。如下:

package com.example.designmodedemo.principle.bridge;


public interface Impls {

    void doBusinessIml();

}

具体实现化角色。如下:

package com.example.designmodedemo.principle.bridge;


public class ChildImpls implements Impls{

    @Override
    public void doBusinessIml() {
        System.out.println(":> 访问具体实现化角色");
    }
}

抽象化角色。如下:

package com.example.designmodedemo.principle.bridge;


public abstract class Abstraction {

    protected Impls impls;

    protected Abstraction(Impls impls){
        this.impls = impls;
    }

    // 定义抽象业务方法,子类实现
    public abstract void doBusiness();

}


扩展抽象化角色。如下:

package com.example.designmodedemo.principle.bridge;


public class ChildAbs extends Abstraction{
    public ChildAbs(Impls impls) {
        super(impls);
    }

    @Override
    public void doBusiness() {
        System.out.println(":> 访问扩展抽象化角色");
        impls.doBusinessIml();
    }
}

客户端调用代码如下:

	
    private void principle_bridge() {
        Impls impls = new ChildImpls();
        Abstraction abstraction = new ChildAbs(impls);
        abstraction.doBusiness();
    }

输入结果如下图:


应用场景

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。

通常适用场景如下:

  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。

桥接模式的一个常见使用场景就是替换继承。但是继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。

因此,在设计模式中,有一个原则为优先使用组合/聚合,而不是继承。


技术永不眠!我们下期见!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号