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

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

4、新建一个紧急程度为普通的消息类:


package com.zwx.design.pattern.bridge;
public class CommonMsg extends AbstractMessage {
    public CommonMsg(IMessage iMessage) {
        super(iMessage);
    }
    @Override
    public void sendMessage(String content, String toUser) {
        this.doSomething();
        super.sendMessage(content, toUser);
    }
    private void doSomething() {
        System.out.println("这只是一个普通消息");
    }
}


5、新建一个紧急程度为紧急的消息类:


package com.zwx.design.pattern.bridge;
public class UrgentMessage extends AbstractMessage{
    public UrgentMessage(IMessage iMessage) {
        super(iMessage);
    }
    @Override
    public void sendMessage(String content, String toUser) {
        doSomething();
        super.sendMessage(content, toUser);
    }
    private void doSomething() {
        System.out.println("这是紧急消息,请优先发送");
    }
}


这时候假如要新增其他紧急程度那直接再建一个类就好了,非常方便。

6、最后新建一个测试类来测试一下:


package com.zwx.design.pattern.bridge;
import java.io.IOException;
public class TestBridge {
    public static void main(String[] args) throws IOException {
        IMessage iMessage = new EmailMessage();
        AbstractMessage abstractMessage = new UrgentMessage(iMessage);//紧急邮件消息
        abstractMessage.sendMessage("您好","张三丰");
        //再来一个普通邮件消息
        System.out.println("------------分割线---------------");
        abstractMessage = new CommonMsg(iMessage);
        abstractMessage.sendMessage("您好","郭靖");
    }
}


输出结果如下:


这是紧急消息,请优先发送
邮件消息->张三丰:您好
------------分割线---------------
这只是一个普通消息
邮件消息->郭靖:您好


桥接模式优缺点


优点:

1、分离了抽象部分及其实现部分两个维度,实现了代码的解耦,提高了系统的扩展性。

3、扩展功能时只需要新增类,无需修改源代码,符合开闭原则。

4、通过组合而不是继承来实现耦合,符合合成复用原则。


缺点:


1、增加了系统的理解难度和设计难度(这也算是大部分设计模式的共性)


2、需要正确识别系统中各个独立变化的维度


总结


本文主要介绍桥接模式的原理,并结合了示例对其进行了分析。桥接模式也是通过组合来实现的。我们在开发中大家都知道要解耦,解耦的实质就是减少对象之间的关联,而继承是一种强关联,因为一旦通过继承,那么子类就会拥有父类所有公开的方法和属性,有些可能并不是子类需要的,而组合就不一样,组合是一种弱关联,我只是持有一个对象,但是我持有对象所拥有的功能并不是我的,和我并没有很强烈的关系。所以实质上在很多场景我们都可以通过组合来解耦继承对象之间的强关联关系。


最后还是希望大家记住编程中的一条原则,那就是:多用组合,少用继承。


目录
相关文章
|
前端开发 数据可视化 JavaScript
探索前端可视化开发:低代码平台原理与实践
【4月更文挑战第7天】本文探讨了低代码平台在前端开发中的应用,介绍了其模型驱动、组件化和自动化部署的原理,强调了提升效率、降低技术门槛、灵活适应变更和保证一致性等优势。建议开发者明确适用场景,选择合适平台,并培养团队低代码技能,同时规划与现有技术栈的融合,实施持续优化治理。低代码平台正改变开发格局,为业务创新和数字化转型提供新途径。
560 0
|
缓存 网络协议 算法
Golang简单实现 分布式缓存+一致性哈希+节点再平衡(gossip + consistent + rebalance)
Golang简单实现 分布式缓存+一致性哈希+节点再平衡(gossip + consistent + rebalance)
426 0
|
关系型数据库 MySQL 测试技术
MySQL 报错 ERROR 1709: Index column size too large
MySQL 报错 ERROR 1709: Index column size too large
653 4
|
弹性计算 Linux 数据安全/隐私保护
在已有的 ECS 上重装幻兽帕鲁服务器、迁移到计算巢、或升级计算巢服务版本
现在你可以参考这篇教程,将原来搭建的幻兽帕鲁服务器迁移到计算巢上,享受计算巢上所支持的界面化调整游戏配置(死亡掉落、服务器密码等)。 或者也可以用于重新安装,升级到最新版本的计算巢幻兽帕鲁服务。
33950 8
|
存储 Java API
Java——Stream流详解
Stream流是JDK 8引入的概念,用于高效处理集合或数组数据。其API支持声明式编程,操作分为中间操作和终端操作。中间操作包括过滤、映射、排序等,可链式调用;终端操作则完成数据处理,如遍历、收集等。Stream流简化了集合与数组的操作,提升了代码的简洁性
1433 11
Java——Stream流详解
|
前端开发 JavaScript 中间件
基于最新koa的Node.js后端API架构与MVC模式
基于最新koa的Node.js后端API架构与MVC模式
413 1
|
机器学习/深度学习 数据可视化 数据挖掘
【视频】结构方程模型SEM分析心理学营销数据路径图可视化|数据分享
【视频】结构方程模型SEM分析心理学营销数据路径图可视化|数据分享
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之数据库执行的是UPDATE操作,那么Flink监听到的类型是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 前端开发 区块链
常见的 EVM 版本以及它们的区别
常见的 EVM 版本以及它们的区别
312 5
抖音最近很火的QQ在线价值评估网站源码(qq价值在线评估)
这个源码是很多年以前的了,最近又在抖音刷到别人直播需要刷礼物才能给你评测,所以又找了一下测试了可用,将源码上传后解压,访问可以直接使用。
1730 0
抖音最近很火的QQ在线价值评估网站源码(qq价值在线评估)