博客
关于我
设计模式之桥接模式
阅读量:660 次
发布时间:2019-03-15

本文共 1930 字,大约阅读时间需要 6 分钟。

桥接模式简介

桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种设计模式通过抽象和实现之间的聚合关系,避免了强耦合的继承关系。它不仅能够满足抽象部分的变化需求,还能在不影响现有功能的情况下扩展新的实现方式。

桥接模式的实例讲解

在电子商城中,用户需要根据不同的分类方式(品牌、场景)进行商品筛选。传统的继承方式会在类结构中建立紧密的依赖关系,且难以应对类别的动态变化。例如,当品牌或场景不断扩展时,现有的类结构会变得难以维护。

不同分类方式的耦合问题

  • 按品牌分类:如果只检索耐克品牌,系统需要通过继承实现不同的品牌逻辑。每新增一个品牌,都意味着增加一个子类,违反了开放-封闭原则。
  • 按穿衣场景分类:如果按应用场景分类(如运动服、休闲服),同样需要子类继承父类逻辑,不易扩展。
  • 这些情况表明,继承关系的复用性较差,难以满足灵活性和扩展性的需求。因此,我们需要寻找一种可以在运行时灵活切换的分类方式,这就是桥接模式的应用场景。

    桥接模式的分类实现

  • 定义抽象层:创建抽象类Scene,提供通用的分类逻辑。
  • 具体实现类:为运动服和休闲服分别创建实现类SportSceneCasualScene,各自实现不同的分类逻辑。
  • 桥接连接:定义品牌抽象类Brand和其实现类(如AdidasClothesNikeClothes)。每个品牌通过聚合引入所需的场景类型。
  • 代码实现

    // Abstraction(抽象)层public abstract class Scene {    public abstract void sort();}// Implementation(实现)层public class SportScene extends Scene {    @Override    public void sort() {        System.out.println("按照运动服分类");    }}public class CasualScene extends Scene {    @Override    public void sort() {        System.out.println("按照休闲服分类");    }}// Abstraction(抽象)层public abstract class Brand {    protected Scene scene;    public void setScene(Scene scene) {        this.scene = scene;    }    public abstract void sort();}// Implementation(实现)层public class AdidasClothes extends Brand {    @Override    public void sort() {        scene.sort();    }}public class NikeClothes extends Brand {    @Override    public void sort() {        scene.sort();    }}// 使用示例public class Client {    public static void main(String[] args) {        Brand adidas = new AdidasClothes();        adidas.setScene(new SportScene());        adidas.sort();        adidas.setScene(new CasualScene());        adidas.sort();        Brand nike = new NikeClothes();        nike.setScene(new SportScene());        nike.sort();        nike.setScene(new CasualScene());        nike.sort();    }}

    桥接模式的优点

  • 抽象与实现分离:通过聚合关系,避免直接依赖具体实现,提高系统灵活性。
  • 良好的扩展性:不同分类方式互不影响,可以随时增加新的分类逻辑。
  • 总结

    桥接模式通过抽象和实现的分离,以及聚合关系的使用,有效解决了多种分类需求的耦合问题。在需要灵活扩展系统功能时,建议采用桥接模式设计,以提高系统的可维护性和扩展性。

    转载地址:http://slfqz.baihongyu.com/

    你可能感兴趣的文章
    A DBA’s take on MSCA (Mobile supply chain applications)
    查看>>
    A DBA’s take on MSCA (Mobile supply chain applications)
    查看>>
    A20地址线
    查看>>
    abaqus质量缩放系数取值_ABAQUS的质量缩放
    查看>>
    Access restriction: The type FileURLConnection is not accessible due to restriction
    查看>>
    #systemverilog# 关于随机约束之 数组类型数据
    查看>>
    Accessibility
    查看>>
    08-信息收集之端口收集(总结版)
    查看>>
    15种下载文件的方法&文件下载方法汇总&超大文件下载
    查看>>
    anaconda、python卸载后重装以及anaconda--443
    查看>>
    AWVS工具太顶了,漏洞扫描工具AWVS介绍及安装教程
    查看>>
    CentOS 系列:CentOS 7 使用 virt-install + vnc 图形界面/非图形界面 创建虚拟机
    查看>>
    CentOS 系列:CentOS 7文件系统的组成
    查看>>
    CentOS系列:【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)
    查看>>
    CSDN----Markdown编辑器
    查看>>
    Docker容器进入的4种方式(推荐最后一种)
    查看>>
    Docker部署postgresql-11以及主从配置
    查看>>
    EnvironmentNotWritableError: The current user does not have write permissions to the target environm
    查看>>
    Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)
    查看>>
    Hyper-V系列:windows11开启系统自带安卓虚拟机并安装apk包
    查看>>