敏捷软件开发 - 原则、模式与实践 —— 设计模式(九)ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式

从转发时钟到嵌入式时钟:CDR、CTLE与DFE在高速串行链路中的协同演进 本文深入探讨了高速串行链路中CDR、CTLE与DFE技术的协同演进。从转发时钟到嵌入式时钟的转变,详细分析了CDR的工作原理与实现架构,以及CTLE和DFE在信道损耗补偿和ISI干扰消除中的关键作用。通过实战案例展示了这些技术在28Gbps至112Gbps SerDes设计中的优化策略与性能提升。 阅读详情

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第25章

ABSTRACT SERVER模式

图1

如上图在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西。这立即就满足了DIP和OCP。这个就是ABSTRACT SERVER模式。

请注意接口的名字是从它的客户的角度起的。它被称为Switchable而不是ILight。我们在前面已经讨论过这个问题,并且可能还会再次看到它。接口属于它的客户,而不是它的派生类。客户和接口之间的逻辑绑定关系要强于接口和它的派生类之间的逻辑绑定关系。它们之间的关系强到在没有Switchable的情况下就无法使用Switch;但是,在没有Light的情况下却完全可以使用Switch。逻辑关系的强度和实体关系的强度是不一致的。继承是一个比关联强得多的实体关系。

ADAPTER模式

图2
上图是一个ADAPTER模式例子。Modem接口有4个方法,新加入一种专线型调试解调器,它无需拨号和挂断,使用专线型调试解调器的客户程序称为DedUser,同时又希望现有客户程序也可以使用这种新型调试解调器。在这个例子中,DedicatedModem不从Modem继承。DedUser客户程序通过DedicatedModemAdapter间接地使用DedicatedModem。在这个适配器的dial和hangup实现中去模拟链接状态。它把send和receive调用委托给DedicatedModem。

BRIDGE模式

Modem问题,还有另外一个方式。对于专用Modem的需要向Modem类型层次结构中增加一个新的自由度。在最初构思Modem类型时,它只是一组不同硬件设备的接口。因此,我们让HayesModem、USModem和ErniesModem从基类Modem派生。但是,现在,出现了另外一种切分Modem层次结构的方式。我们可以让DialModem和DedicatedModem从Modem派生。

在类型层次结构具有多个自由度的情况中,BRIDGE模式通常是有用的。我们可以把这些层次结构分开并通过桥把它们结合在一起,而不是把它们合并起来。

图3
上图展示了这个结构。我们把Modem类层次结构分成两个层次结构。一个表示连接方法,另一个表示硬件。

Modem的使用者继续使用Modem接口,ModemConnectionController实现了Modem接口。ModemConnectionController的派生类控制着连接机制。DialModemController的dial方法和hangup方法只是转调用基类ModemConnectionController中的dialImp和hangupImp。接着,这两个方法把调用委托给类ModemImplementation,在那里它们会被分派到适当的硬件控制器。DedModemController把dial和hangup实现为模拟连接状态。它的send和receive会转调用sendImp和receiveImp,并像前面一样再委托给ModemImplementation层次结构。

请注意,ModemConnectionController基类中的4个imp方法都是受保护的。这是因为它们只被ModemConnectionController的派生类使用。其他任何类都不应当调用它们。

结论

使用ADAPTER模式的解决方案是简单和直接的。它让所有的依赖关系都指向正确的方向,并且实现起来非常简单。BRIDGE模式稍微有些复杂。我建议在开始时不要使用BRIDGE模式,直到你明显可以看出需要完全分离连接策略和通讯策略并且需要增加新的连接策略时,才使用这种方法。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

Redhawk-SC输入件配置中的5个常见错误及解决方法 本文针对Redhawk-SC功耗与可靠性签核工具,深入剖析了输入件配置中工艺文件错配、DEF文件路径、时序文件格式、电源网络模型及宏模型处理这5个最常见且棘手的错误。文章提供了资深工程师验证过的实战解决方案与检查清单,旨在帮助用户规避风险,提升配置效率与分析准确性,确保芯片签核流程的顺利进行。 阅读详情

相关推荐

雪球股票数据接口

周期(day-日,week-周,…表示获取前8个周期(日)数据):类型(before-历史)表示深圳证券交易所,表示上海证券交易所):开始时间戳(一定要。

qq_31856061的博客 6808

《敏捷软件开发》— 设计模式(一)

《敏捷软件开发》— 设计模式(一)一、Command 模式和 Active Object 模式1、Command 模式2、Active Object 模式 一、Command 模式和 Active Object 模式 1、Command 模式 我们在 《设计模式》— 行为型模式 — 命令模式中学习过命令模式。该模式可以将负责实现业务逻辑的模块与上层模块分离。 2、Active Object 模式 Active Object 模式是命令模式在多线程控制的具体应用。 ...

coding-hwz 654

亿佰特E77模块(STM32WLE5CCU6)LoRa通信实战指南:从配置到应用开发

本文详细介绍了亿佰特E77模块(STM32WLE5CCU6)的LoRa通信实战指南,从硬件配置到应用开发。基于ARM Cortex-M4内核的E77模块集成了LoRa射频前端,具备超低功耗和硬件级抗干扰特性,适用于智能农业、工业现场等场景。文章提供了开发环境搭建、LoRa参数配置、实战通信及性能优化等实用技巧,帮助开发者快速掌握LoRa通信技术。

weixin_29164185的博客 762

Abstract Server模式

Abstract Server是一个很简单的模式,很多时候大家都在用,只是没有去总结。Uncle Bob提出了这个概念(见Agile Software Development)。 Abstract Server相关的一些概念还是很重要的,也很有启发。通常,Abstract Server就直接体现了DIP(依赖倒置)。DIP是一个很重要的概念。往往遵守DIP原则的代码灵活性会更好。

zj510的专栏 1862

使用RepeatModeler和RepeatMasker注释基因组重复序列

重复序列注释有两种常用策略,基于同源序列相似性和基于重复序列结构特征。RepeatMasker是基于同源序列相似性注释序列的常用工具, RepeatModeler可用来从头对基因组的重复序列家族进行建模注释,它的核心组件是RECON和RepatScout。 这篇教程介绍如何使用RepeatModeler从头鉴定基因组的重复序列,之后用RepeatMasker根据自...

xuzhougeng blog 8854

车道线检测(传统基于Opencv的方法)

传统车道线检测方法主要是使用颜色选择、高斯平滑、边缘检测、ROI区域选择、霍夫变换、标定车道边界等Opnecv图像处理操作去检测道路上的车道线,我自己对很多用这类处理对很多道路场景车道线进行过实验,这类算法往往需要人工根据不同街道场景手动去反复调整各算法参数,从而才能使检测效果最佳。

Yangxiaoaijiejie的博客 2073

设计模式--Abstract server模式 VS Adapter 模式

一、 Abstract Server 模式: 图1 二、Adapter 模式: 图2 : 委托形式的Adapter 模式 图3: 类形式的Adapter模式 图4 疑问:DedUser 是关联 Dedicated Modern对象还是Modern对象?

haima1998的专栏 763

Dify安装使用说明

dify可以说是一个功能不错的LLMOps,可以通过dify集中管理模型,可以通过界面创建AI应用,可以上传文档形成知识库,可以创建自定义工具(API),并可以对外提供API。相关功能类似Openai的GPTs或智谱的智能体,其他大厂的大模型也有类似功能,不过貌似只有dify是开源的。这就为个人本地部署AI应用提供了便利。

龙井茶的Sky 1万+

Abstract Server、Adapter 和 Bridge 模式

Abstract Server、Adapter 和 Bridge 模式

小强快跑~~ 233

华为OD机试 C++【TLV解析】

这里的valueOffset指的是value在整串消息里的起始位置(从0开始数)。这表示tag是15(十六进制的0F),length是4,接着的8个字符是value的内容。你收到了一串由两端设备传递的TLV格式的消息,现在你需要根据这串消息生成一个对应的(tag, length, valueOffset)列表。tag是15,对应的数据长度为4,value从第3个字节开始,所以偏移量为2。第二行:一个数字n,表示我们给出的tag的数量(0 < n < 1000)。第一行:一串消息,长度不超过10000。

wtswts1232的博客 482

使用 syncstart 实现同场景下多个音视频音轨自动化同步

如果需要在视频编辑中同步多个机位的音轨,使得相同的视频能够同时播放,手动操作可能会变得相当复杂。特别是当处理多个视频文件时,例如有10个视频需要互相匹配,实现一对多的同步关系,这就涉及到为每对视频生成匹配的音轨数据。手动完成这样的任务,如生成90套对应的音轨数据,不仅耗时而且容易出错。因此,使用脚本自动化这一过程是一个更为高效和准确的解决方案。通过编写脚本,您可以批量处理多个视频文件,自动同步它们的音轨,大大简化了音视频编辑的工作流程,并确保了同步的准确性。

Mr数据杨 1076

Abstract Server模式,Adapter模式和Bridge模式

简易的台灯 Abstract Server模式 谁拥有接口. 接口属于它的客户,而不是它的派生类. 接口和客户之间的逻辑关系,强于接口和其派生类的逻辑关系. 逻辑关系和实体关系的强度是不一致的.在实体关系上,继承比依赖更强. 最好将接口和它的客户打包,而不是和它的派生类在一起. Adapter模式 当Light不能继承Switch...

weixin_30505225的博客 183

基于Flink的流式数据降维实现方案

理解为何实时场景需要降维(解决维度灾难)掌握Flink流处理与降维算法的结合方式学会用Flink实现一个可落地的流式降维系统覆盖内容包括:Flink流处理基础、降维算法选择(侧重在线算法)、Flink与降维的集成方案、实战代码示例,以及工业级场景的应用经验。本文从“为什么需要流式降维”出发,用“快递分拣”的生活案例引出核心概念;接着拆解Flink流处理、数据降维的底层逻辑;然后重点讲解“在线PCA”这一适合流式场景的降维算法,并用Flink实现一个完整的流式降维管道;

AI 领航者的博客 567

敏捷软件开发 - 原则、模式与实践

起源 《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。 可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量...

feifeilb的博客 2377

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

推荐:《敏捷软件开发、原则、模式与实践》电子版

 内容简介 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。   ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。   ·使用真实案例讲解如何用极限编程来设计、测试、重构和结

Scrum中文网-博客 1318

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

敏捷软件开发:原则、模式与实践pdf

下载地址:网盘下载内容简介······在本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。目录······第Ⅰ部分 敏捷开发第一章 敏捷实践1.1...

weixin_30363981的博客 879

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

《敏捷软件开发》读书笔记(3)

《敏捷软件开发》读书笔记(3) 书中设计模式的汇总 命令类模式,分离执行和定义 CMD模式 其实是事件-事务绑定的模型: 可以用事件驱动,只要收到事件,执行绑定到事件对应的CMD对象.do方法就行,对于真正执行的事情无感知。解除了系统的逻辑互联关系和实际连接关系的设备之间的耦合。 事务型操作,把验证和执行分离,由执行框架完成验证和执行操作。解除了获取数据、验证数据、执行数据操作这种空间耦合,同时...

drumdream的博客 303

敏捷软件开发:原则、模式与实践

下载地址:网盘下载内容简介······在本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。目录······第Ⅰ部分 敏捷开发第一章 敏捷实践1.1 ...

weixin_30384031的博客 151

推荐书籍系列(2):敏捷软件开发――原则、模式与实践

又名: Agile Software Development: Principles, Patterns, and Practices 译者: 邓辉作者: (美)Robert C·Martin 邓辉 孟岩 审 isbn: 7302071977页数: 500出版社: 清华大学出版社出版年: 2003-9-1 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您...

weixin_30267785的博客 145

软考-系统分析师-备考笔记

根据学习视频和一些资料整理的软考系统分析师考试笔记,2025年下半年通关

提子同学是我 1027

设计模式(3)abstract server模式、适配器模式、桥接模式

Abstract Server模式 Adapter适配器模式 桥接模式

David 521

ABSTRACT SERVER -- (模式之十四)

/* * 上面是一个灯和控制灯开关的例子,一个是灯,一个是等控制类,如果要控制灯,控制类直接依赖或者作用于灯,这样的设计是最简单也最明了的, * 不过根据设计原则我们违反了依赖导致原则(DIP)和开放封闭原则(OCP),依赖倒置即:依赖接口(抽象)而不依赖具体的实现, * 此列中依赖于具体的LIGHT(类)了, 开放封闭原则:我们在任何控制开关的地方都要带上LIGHT这样就不容易管理和

古影轩 1088

Abstract Server

【一】一个简单的设计问题:设计运行在简易台灯中的软件。台灯由一个开关和一盏台灯组成。你可以询问开关是开着还是关着,也可以让灯打开或关闭。 ---------------------------------------- 请考虑下图: [img]http://dl2.iteye.com/upload/attachment/0120/1709/140fec6c-50af-3c38-9ae5-d6...

u013174523的专栏 242

设计模式(3)abstract server

应用场景: 简易的台灯包括: 1.switch (开关) 2.light(灯) 原来是两个类。 把模式加上: switch(开关) light(灯) switchable(开关接口,灯来实现) 注意事项: 谁拥有这个接口?? 接口属于它的客户,而不是他的派生类。 客户和接口之间的逻辑绑定关系,要强于接口和他的派生类之间的逻辑绑定关系。

foxox 484

一分钟了解敏捷开发模式

​敏捷开发是一种新型的开发方法,实际操作中采用种循序渐进的迭代式开发模型,力求在保证项平稳运行的情况下,逐次开发出需要使用的核心功能。 通俗场景解释:餐厅点菜 服务员:欢迎观临,请问您有什么需要? 客人:那个,我要蒸羊羔儿、蒸熊掌、蒸鹿尾儿、烧花鸭、烧雏鸡、烧子鹅...一共18个菜...

chuanhanxu5898的博客 341

敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。 本文对应原书第24章 上图展示了OBSERVER模式的规范形式。在本例中,Clock被DigitalClock观察。DigitalClock通过Subject接口注册到Clock中。无论任何原因,只要时间一改变,Clock就调用Subject的notify方法。而Subject的notify方法会调用每个已注册Observer对象的upda...

feifeilb的博客 262
上一篇: 敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式
下一篇: 敏捷软件开发 - 原则、模式与实践 —— 设计模式(十)PROXY模式和STAIRWAY TO HEAVEN模式
feifeilb
博客等级 码龄22年 22粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值