设计模式之桥接模式

本文介绍桥接模式,先回顾开闭原则、组合聚合复用原则和脱耦知识。桥接模式是结构型设计模式,将抽象与行为实现分开,保持各部分独立性与扩展性。还给出Uml图及角色分析、基本代码示例,阐述其应用场景和优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

桥接模式bridge

在学习桥接模式之前我们先来回顾以下以前的知识

开闭原则(OCP)

对扩展开放。模块对扩展开放,就意味着需求变化时,可以对模块扩展,使其具有满足那些改变的新行为。换句话说,模块通过扩展的方式去应对需求的变化。

对修改关闭。模块对修改关闭,表示当需求变化时,关闭对模块源代码的修改,当然这里的“关闭”应该是尽可能不修改的意思,也就是说,应该尽量在不修改源代码的基础上面扩展组件。

组合聚合复用原则(CARP)

尽量使用对象组合,而不是继承来达到复用的目的。就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量不要使用继承。

脱耦

抽象化和实现化之间使用组合聚合关系而不是继承关系

 

什么是桥接模式?

桥接模式是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合、以及继承等行为让不同的类承担不同的职责。主要特点是把抽象与行为实现分开来,从而保持各部分的独立性以及对应他们的功能扩展。

 

Uml图以及角色分析

 

抽象化等级结构与实现化等级结构

单向桥:只能是抽象化部分的对象去使用具体实现部分的对象。

抽象类(Abstraction)

抽象类接口(接口这货抽象类)维护队行为实现(implementation)的引用。它的角色就是桥接类。

Implementor

行为实现类接口(Abstraction接口定义了基于Implementor接口的更高层次的操作)

基本代码:

使用邮件、手机、站内等多种方式实现发送普通消息、加急消息、特级消息。

public interface MessageImplementor{                //实现接口
public void send(String message,String toUser);
}

public  abstract class AbsteactMessage{
proctected MessageImplementor impl;         //单向桥抽象部分使用实现部分

public AbsteactMessage(MessageImplementor impl){
impl=this.impl;
}
//发送消息,转调实现部分的方法
public void senfMessage(String message,String toUser){
this.impl.send(message,toUser);
    }
}
                                                        //具体实现站内发送方式
public  class MessageSMS implements MessageImplementor{    
    public void send(String message, String toUser) {    
        System.out.println("使用站内短消息的方式,发送消息'"   
+message+"'给"+toUser);    
    }    
}
                                                         //邮件发送
public class MessageEmail implements MessageImplementor{    
    public void send(String message, String toUser) {    
        System.out.println("使用Email的方式,发送消息'"   
                               +message+"'给"+toUser);    
    }    
}
                                                        //手机发送
public  class MessageMobile implements MessageImplementor{    
    public void send(String message, String toUser) {    
        System.out.println("使用手机短消息的方式,发送消息'"   
+message+"'给"+toUser);    
    }    
}

                                                     //抽象普通消息
public class CommonMessage extends AbstractMessage{    
    public CommonMessage(MessageImplementor impl) {    
        super(impl);    
    }    
    public void sendMessage(String message, String toUser) {    
        super.sendMessage(message, toUser);    
    }       
}  
                                                    //抽象加急消息

public class UrgencyMessage extends AbstractMessage{    
    public UrgencyMessage(MessageImplementor impl) {    
        super(impl);    
    }    
    public void sendMessage(String message, String toUser) {    
        message = "加急:"+message;    
        super.sendMessage(message, toUser);    
    }    
    public Object watch(String messageId) {       //监控方法
        return null;    
    }       
}  

本质:分离抽象和实现

应用场景:

不希望在抽象和实现部分采用固定的绑定关系;抽象和实现部分都应该可以扩展的情况;

许多子类继承的情况;

优点:分离抽象部分和实现部分,使彼此相互独立,变化不会相互影响

 

 

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值