GoF设计模式:桥接模式(Bridge Pattern)—处理多维度变化


GoF设计模式:桥接模式(Bridge Pattern)—处理多维度变化

在正式介绍桥接模式之前,先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。

假如我们需要大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3×12 = 36支,但如果使用毛笔的话,只需要提供3种型号的毛笔,外加12个颜料盒即可,涉及到的对象个数仅为 3 + 12 = 15,远小于36,却能实现与36支蜡笔同样的功能。

如果增加一种新型号的画笔,并且也需要具有12种颜色,对应的蜡笔需增加12支,而毛笔只需增加一支。

为什么会这样呢?

通过分析我们可以得知:在蜡笔中,颜色和型号两个不同的变化维度(即两个不同的变化原因)融合在一起,无论是对颜色进行扩展还是对型号进行扩展都势必会影响另一个维度;但在毛笔中,颜色和型号实现了分离,增加新的颜色或者型号对另一方都没有任何影响。

如果使用软件工程中的术语,我们可以认为在蜡笔中颜色和型号之间存在较强的耦合性,而毛笔很好地将二者解耦,使用起来非常灵活,扩展也更为方便。在软件开发中,我们也提供了一种设计模式来处理与画笔类似的具有多变化维度的情况,即本章将要介绍的桥接模式。

模式概述

桥接模式是一种很实用的结构型设计模式。

如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。

与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。

模式定义

桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式。

模式结构图

在使用桥接模式时,我们首先应该识别出一个类所具有的两个独立变化的维度,将它们设计为两个独立的继承等级结构,为两个维度都提供抽象层,并建立抽象耦合。

通常情况下,我们将具有两个独立变化维度的类的一些普通业务方法和与之关系最密切的维度设计为“抽象类”层次结构(抽象部分),而将另一个维度设计为“实现类”层次结构(实现部分)。

例如: 对于毛笔而言,由于型号是其固有的维度,因此可以设计一个抽象的毛笔类,在该类中声明并部分实现毛笔的业务方法,而将各种型号的毛笔作为其子类;颜色是毛笔的另一个维度,由于它与毛笔之间存在一种“设置”的关系,因此我们可以提供一个抽象的颜色接口,而将具体的颜色作为实现该接口的子类。

在此,型号可认为是毛笔的抽象部分,而颜色是毛笔的实现部分,结构示意图如下图所示:

桥接模式(Bridge Pattern)——处理多维度变化

模式总结

桥接模式是设计Java虚拟机和实现JDBC等驱动程序的核心模式之一,应用较为广泛。

在软件开发中如果一个类或一个系统有多个变化维度时,都可以尝试使用桥接模式对其进行设计。

桥接模式为多维度变化的系统提供了一套完整的解决方案,并且降低了系统的复杂度。

优点

  1. 分离抽象接口及其实现部分。
  2. 桥接模式可以取代多层继承方案,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大减少了子类的个数。
  3. 桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。

适用场景

  1. 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展。
  2. 对于那些不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

CSCODE.NET开发框架文库 - C/S架构winform开发框架

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:GoF设计模式:职责链模式(Chain of Responsibility Pattern)—请求的链式处理
下一篇:GoF设计模式:代理模式(Proxy Pattern)—对象的间接访问
评论列表

发表评论

评论内容
昵称:
关联文章

GoF设计模式模式(Bridge Pattern)—处理变化
GoF设计模式:工厂模式(Factory Pattern)
GoF设计模式:装饰模式(Decorator Pattern)—扩展系统功能
GoF设计模式:职责链模式(Chain of Responsibility Pattern)—请求的链式处理
GoF设计模式:组合模式(Composite Pattern)—树形结构的处理
GoF设计模式:中介者模式(Mediator Pattern)—协调个对象之间的交互
GoF设计模式:外观模式(Facade Pattern)—提供统一的入口
GoF设计模式:原型模式(Prototype Pattern)—对象的克隆
GoF设计模式:代理模式(Proxy Pattern)—对象的间接访问
功能的优缺点
GoF设计模式:命令模式(Command Pattern)—请求发送者与接收者解耦
GoF设计模式:享元模式(Flyweight Pattern)—实现对象的复用
GoF设计模式:适配器模式(Adapter Pattern)—不兼容结构的协调
GoF设计模式:访问者模式(Visitor Pattern)—操作复杂对象结构
GoF设计模式:迭代器模式(Iterator Pattern)—遍历聚合对象中的元素
关于Winform开发框架功能
GoF设计模式:单例模式(Singleton Pattern)—确保对象的唯一性
GoF设计模式:建造者模式(Builder Pattern)—复杂对象的组装与创建
开发应用 - 策略模式(Strategy Pattern) 常用设计模式
C#设计模式应用-单件模式(Singleton Pattern)

热门标签
.NET5 .NET6 .NET7 APP Auth-软件授权注册系统 Axios B/S B/S开发框架 Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 DAL数据访问层 Database datalock DbFramework Demo教学 Demo下载 DevExpress教程 DOM EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS NavBarControl Node.JS NPM OMS ORM PaaS POS Promise API Redis SAP SEO SQL SQLConnector TMS系统 Token令牌 VS2022 VSCode VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 版本区别 报表 踩坑日记 操作手册 代码生成器 迭代开发记录 基础资料窗体 架构设计 角色权限 开发sce 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 秘钥 密钥 权限设计 软件报价 软件测试报告 软件简介 软件开发框架 软件开发平台 软件开发文档 软件体系架构 软件下载 软著证书 三层架构 设计模式 生成代码 实用小技巧 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序