适配器模式与桥接模式(2)

简介: 适配器模式与桥接模式(2)

二、桥接模式


image.png


抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。

扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。


实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。

具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。


桥接模式示例


下面我们以发消息为例来进行说明,首先消息类型是一个维度,比如可以发邮件,发短信。然后消息可以有紧急消息,普通消息,这又是一个具体的维度。


1、首先新建一个消息接口类:


package com.zwx.design.pattern.bridge;
public interface IMessage {
    void send(String content,String toUser);
}


2、新建两个实现类,分别是邮件消息和短信消息:


package com.zwx.design.pattern.bridge;
public class EmailMessage implements IMessage {
    @Override
    public void send(String content, String toUser) {
        System.out.println(String.format("邮件消息->%s:%s",toUser,content));
    }
}


package com.zwx.design.pattern.bridge;
public class SmsMessage implements IMessage {
    @Override
    public void send(String content, String toUser) {
        System.out.println(String.format("SMS消息->%s:%s",toUser,content));
    }
}


假如这时候我们需要按照普通消息和紧急消息来做一些不同的事情,那么这时候普通写法会怎么写,我想可能会是如下写法,直接改写消息类,在分别去实现紧急消息类和普通消息类:


public class SmsMessage extends CommonMsg implements IMessage {


但是Java是单继承,所以一次只能继承一个,要么就把普通消息和紧急消息设置为接口,要么就作为组合的形式,将紧急消息和普通消息分别作为属性存到对应的消息类型里面去。但是不论是哪种形式,都需要修改原先的SmsMessage 类。


所以这时候就需要使用桥接模式,将抽象(消息类型)与实现(消息紧急程度)进行分离。


3、新建一个抽象类,将IMessage集成进去:


package com.zwx.design.pattern.bridge;
public abstract class AbstractMessage {
    private IMessage iMessage;
    public AbstractMessage(IMessage iMessage) {
        this.iMessage = iMessage;
    }
    public void sendMessage(String content,String toUser){
        this.iMessage.send(content,toUser);
    }
}



目录
相关文章
|
6月前
|
人工智能 JavaScript Linux
阿里云/本地保姆级部署OpenClaw,构建高效运行环境:官方15项推荐Skill、多系统部署与模型配置完整实践
OpenClaw作为具备执行能力的AI智能体框架,其实际价值高度依赖技能(Skill)生态的支撑。一套稳定、轻量化、高频可用的技能组合,可以让系统在文档处理、信息检索、代码辅助、数据整理、自动化执行等场景中持续发挥作用。本文基于社区高频使用场景,整理15项轻量、稳定、无侵入的核心技能,完整说明功能定位、安装方式、使用场景与注意事项,并提供2026年阿里云、MacOS、Linux、Windows11标准化部署流程、阿里云百炼Coding Plan API与免费大模型配置方案,以及常见问题的稳定解决方案,全文不包含营销表述,所有命令与配置均可直接复制使用。
792 3
|
3月前
|
人工智能 JavaScript 编译器
限时免费:云效 AI 代码评审新增跨文件感知,改一处查全局
云效 AI 代码评审新增跨文件感知能力,免费开放。改了一个函数,AI 自动追踪所有调用方,提 MR 时就能发现那些藏在 Diff 之外的风险。实测召回率提升 19 个百分点。
|
7月前
|
人工智能 安全 算法
APP上架流程与资质详解
APP作为连接用户与服务的核心载体,其上架流程与资质合规性不仅是企业进入市场的“入场券”,更是保障用户权益、维护行业秩序的基石。
1073 1
|
8月前
|
存储 人工智能 移动开发
2026年阿里云最新域名类活动,注册、续费和转入相关活动参考
本文为大家整理了2026年阿里云域名注册、续费和转入相关的,如万网新客权益中心推出39元AI建站赠.CN域名、.com低至35元、.net注册39元起等活动;域名转入每周三享低价,批量注册.cn低至19元、.net低至51元;特色域名如.xin、.xyz等1元起限时特惠。
3943 8
|
8月前
|
存储 弹性计算 网络安全
阿里云新手必看:2026年云服务器购买全流程与配置选型指南
对阿里云新手来说,选云服务器不用追求高配置,核心是 “匹配需求、控制成本、简化操作”,重点关注 “选购买路径、配核心参数、搭基础环境” 这三方面。下面结合实操经验,给新手梳理清晰的选型框架,帮大家快速选到合适的服务器。
|
数据挖掘 Python
如何判断处理后的数据是否仍然存在重复值?
通过以上任意一种方法,都可以有效地判断处理后的数据是否仍然存在重复值,从而确保数据的准确性和唯一性,为后续的数据分析和处理提供可靠的数据基础。
907 66
|
人工智能 安全 BI
Salesforce on Alibaba Cloud生态共赢
**Salesforce on Alibaba Cloud 生态共赢** 简介:Salesforce作为全球领先的CRM服务商,与阿里云达成战略合作,在亚太地区由阿里云独家运营其产品。双方深度集成云服务,为中国企业提供合规、安全的CRM解决方案。通过咨询生态和ISV生态合作计划,共同建设丰富的Salesforce产品生态,助力中国企业应对数据隐私和业务需求,欢迎更多合作伙伴入驻,共创新辉煌。 (239字符)
646 0
|
开发框架 前端开发 开发者
【Uniapp 专栏】Uniapp 的状态管理功能深度解析
【5月更文挑战第13天】Uniapp 的状态管理对于构建复杂跨平台应用至关重要,它包括全局变量、Vuex 风格管理。核心概念有 State、Actions 和 Mutations。通过状态定义、动作设计和突变管理,提高开发效率和代码可维护性。实际案例和与其他框架比较显示了 Uniapp 的优势。理解并有效利用状态管理,能提升应用质量和开发效率。
879 1
【Uniapp 专栏】Uniapp 的状态管理功能深度解析
|
人工智能 程序员 测试技术
游戏开发成本认知鸿沟:从民间臆测到3A现实的残酷距离-优雅草卓伊凡
游戏开发成本认知鸿沟:从民间臆测到3A现实的残酷距离-优雅草卓伊凡
837 16
游戏开发成本认知鸿沟:从民间臆测到3A现实的残酷距离-优雅草卓伊凡
|
安全 测试技术 Shell
Metasploit框架技术浅析
Metasploit框架是广泛使用的渗透测试工具,支持漏洞利用、有效载荷执行、辅助操作等功能,适用于安全研究与测试。通过模块化设计,Metasploit提供了从信息收集到后渗透的完整攻击流程,助力提升系统安全性。使用时需遵守法律,确保测试授权。
598 70