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

经典算法之——解决全排列问题以及详解 回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1]; 阅读详情

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

本文对应原书第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模式,直到你明显可以看出需要完全分离连接策略和通讯策略并且需要增加新的连接策略时,才使用这种方法。

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

IDEA的使用指南 IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧. 立即下载

相关推荐

jlink v9刷固件修改序列号来修复弹窗

jlink v9弹窗警告修复j

weixin_40500627的博客 9367

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

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

coding-hwz 654

MTK PE+2.0介绍

  PE+2.0介绍:   1.      PE+2.0的状态机: 2.      升压波形协议及编码规则: PE+2.0软件设计:   在充电器类型为标充且底层电量SOC在1%—95%之间时,开始PE+2.0升压充电器的检测:首先将VBUSreset至5V,之后发送8.5的current pattern再获取此时VBUS电压和8.5V比较,若其与8.5的差值绝对值在0.5之...

raydom07的博客 1万+

Abstract Server模式

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

zj510的专栏 1862

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1993

锂电池剩余使用寿命预测(RUL) | 基于Stacked-LSTM-Autoencoder的锂电池寿命多变量多步预测(Tensorflow)

锂电池剩余使用寿命预测(RUL) | 基于Stacked-LSTM-Autoencoder的锂电池寿命多变量多步预测(Tensorflow)

前程算法屋的博客 851

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

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

haima1998的专栏 763

华为OD机试真题 新系统2026-04-01 C语言 实现【计算数列位置N的值】

1、输入M、N两个数,则按照以下规则形成一个数列; 2、数列的前M个元素的值为1到M; 3、从M+1个元素开始,计算的逻辑为: 如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;

MISAYAONE的博客 591

Abstract Server、Adapter 和 Bridge 模式

Abstract Server、Adapter 和 Bridge 模式

小强快跑~~ 233

【2025年阿里云暑期实习(算法岗)-4月24日-第一题(100分)- 小红听歌】(题目+思路+Java&C++&Python解析+在线测试)

小红正在听歌,屏幕上同时展示着歌词和对应的播放进度条。s1t101ti​0iti​1i小红每次可以操作快进或回退一个歌词(即将播放指针向右或向左移动一个位置),数据初始时和操作过程均保证已经播放的歌词是s的一个前缀(可为空串)。她的目标是:以尽可能少的操作次数,使得字符串s中未播放状态的歌词是"幸运串"。请你计算,为了达到该目标,至少需要多少次操作?(数据保证可以在有限次内完成操作目标)【幸运串】每种字母出现的次数为指定的次数,可为空串,具体可查看输入描述。

m0_73659489的博客 115

跨 Agent 语义沟通机制构建:共享知识图谱与语义对齐方法

在具身智能与多智能体系统协同日益复杂化的背景下,跨 Agent 的语义沟通能力成为任务完成效率和系统鲁棒性提升的关键技术路径。本文系统分析了当前业界在共享知识图谱、语义嵌入对齐、语义意图建模与跨模态语义通信协议设计方面的实践经验,深入讲解如何在 Habitat-MARL 与 Isaac-MARL 等平台中,基于实体-关系结构、语义分布表示与任务上下文,构建具备理解、共享、协作能力的多 Agent 语义系统。文章以工程实战为主,覆盖图谱构建、语义嵌入同步、对齐模型部署、通信接口集成等多个核心模块,结合真实应用

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1293

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

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

weixin_30505225的博客 183

36 Agent Memory:如何让智能体记住该记的东西

Agent 会调用工具,只能说明它有了行动能力。要让它跨会话、跨任务持续工作,还需要一套可治理的 Memory 系统。本文讲清上下文窗口、RAG 和 Agent Memory 的区别,以及工作记忆、情景记忆、语义记忆、程序记忆该如何分层设计。

老于的笔记的专栏 90

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

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

feifeilb的博客 2377

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

Scrum中文网-博客 1318

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

weixin_30363981的博客 879

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《敏捷软件开发》读书笔记(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、付费专栏及课程。

余额充值