千家信息网

使用Adapter模式时需要考虑哪些因素

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍"使用Adapter模式时需要考虑哪些因素"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"使用Adapter模式时需要考虑哪些因素"文章能帮助大
千家信息网最后更新 2025年02月03日使用Adapter模式时需要考虑哪些因素

这篇文章主要介绍"使用Adapter模式时需要考虑哪些因素"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"使用Adapter模式时需要考虑哪些因素"文章能帮助大家解决问题。

效果


类适配器和对象适配器有不同的权衡。类适配器
• 用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

这是类适配器的缺点。


• 使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

作为派生类,可以很简单地修改基类的行为并直接被Adapter适用。


• 仅仅引入了一个对象,并不需要额外的指针以间接得到adaptee。

比对象适配器少占一个指针变量的空间,并且不需要另外建立Adapter和Adaptee之间的关系。


对象适配器则
• 允许一个Adapter与多个Adaptee-即Adaptee本身以及它的所有子类(如果有子类的话)-同时工作。Adapter也可以一次给所有的Adaptee添加功能。

这是很方便的!


• 使得重定义Adaptee的行为比较困难。这就需要生成 Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

需要替换Adapter引用的Adaptee对象。

相比较而言,对象适配器多用一个指针变量,多一些程序性的操作获得了更大的灵活性。作者推荐对象适配器。


使用Adapter模式时需要考虑的其他一些因素有:
1) Adapter的匹配程度

对Adaptee的接口与Target的接口进行匹配的工作量各个Adapter可能不一样。工作范围可能是,从简单的接口转换(例如改变操作名 )到支持完全不同的操作集合。Adapter的工作量取决于Target接口与Adaptee接口的相似程度。

道理很简单:差别越多,适配的工作量也就越大。


2) 可插入的Adapter

当其他的类使用一个类时,如果所需的假定条件越少,这个类就更具可复用性。如果将接口匹配构建为一个类,就不需要假定对其他的类可见的是一个相同的接口。也就是说,接口匹配使得我们可以将自己的类加入到一些现有的系统中去,而这些系统对这个类的接口可能会有所不同。Object-Work / Smalltalk [ P a r 9 0 ]使用pluggable adapter一词描述那些具有内部接口适配的类。

这段话不大好理解,作者努力解说一下。当我们设计一个类时,一般都存在一些假设。例如内存可以随意适用,不需要多任务安全等。这样的假设越少,类可以适用的场景就越多,也就是说更具可复用性。众多假设中有一个就是类的用法,也就是接口。使用适配器意味着类可以任何方式适用。


考虑TreeDisplay窗口组件,它可以图形化显示树状结构。如果这是一个具有特殊用途的窗口组件,仅在一个应用中使用,我们可能要求它所显示的对象有一个特殊的接口,即它们都是抽象类Tree的子类。如果我们希望使TreeDisplay有具有良好的复用性的话(比如说,我们希望将它作为可用窗口组件工具箱的一部分),那么这种要求将是不合理的。应用程序将自己定义树结构类,而不应一定要使用我们的抽象类Tree。不同的树结构会有不同的接口

一般来讲,TreeDisplay组件需要和某种Tree类协同工作。如果这个TreeDisplay只是在一个应用中使用,那么我们可以完全可以将需要TreeDisplay表示的数据设计成Tree的子类。但是如果希望TreeDisplay可以在各种场合,各种应用中使用时,就不应该有这个要求。因为对于已有类,这意味着类结构的巨大变化;对于新设计的类,为了一个表示功能,改变类本来的继承关系也有些过分了。


例如,在一个目录层次结构中,可以通过GetSubdirectories操作进行访问子目录,然而在一个继承式层次结构中,相应的操作可能被称为GetSubclasses。尽管这两种层次结构使用的接口不同,一个可复用的TreeDisplay窗口组件必须能显示所有这两种结构。也就是说,TreeDisplay应具有接口适配的功能。

如果从取得下一级要素的角度来看,GetSubdirectories和GetSubclasses做的是相同的事。我们的设计的TreeDisplay需要满足上述两种要求。这属于主动适配的范畴。

3) 使用双向适配器提供透明操作 使用适配器的一个潜在问题是,它们不对所有的客户都透明。被适配的对象不再兼容Adaptee的接口,因此并不是所有Adaptee对象可以被使用的地方它都可以被使用。双向适配器提供了这样的透明性。在两个不同的客户需要用不同的方式查看同一个对象时,双向适配器尤其有用。

一般来讲,适配器考虑的是让Adaptee的功能在Adapter的上下文中被使用。在Adaptee的利用者看来,Adapter要么不可见(对象适配器),要么不一定好用(类适配器)。当我们需要从两个方向都有需要使用某功能时,就需要双向适配器。

考虑一个双向适配器,它将图形编辑框架 Unidraw [VL90]与约束求解工具箱QOCA[ H H M V 9 2 ]集成起来。这两个系统都有一些类,这些类显式地表示变量: Unidraw含有类StateVariable,QOCA中含有类ConstraintVariable,如下图所示。为了使Unidraw与QOCA协同工作,必须首先使类ConstraintVariable与类StateVariable相匹配;而为了将QOCA的求解结果传递给Unidraw,必须使StateVariable与ConstraintVariable相匹配。

双向适配器在两个方向都有效。

这一方案中包含了一个双向适配器ConstraintStateVariable,它是类ConstraintVariable与类StateVariable共同的子类,ConstraintStateVariable使得两个接口互相匹配。在该例中多重继承是一个可行的解决方案,因为被适配类的接口差异较大。双向适配器与这两个被匹配的类都兼容,在这两个系统中它都可以工作。

本例中使用的是类适配器,ConstraintStateVariable即是ConstraintVariable又是StateVariable;其实也应该可以是使用对象适配器,这时ConstraintVariable和StateVariable共通分享一个ConstraintStateVariable。

关于"使用Adapter模式时需要考虑哪些因素"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

适配 适配器 接口 对象 不同 子类 工作 双向 结构 两个 功能 组件 因素 模式 也就是 系统 复用 应用 也就是说 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 jsp数据库配置文件 查询最新分区里的数据库 软件开发项目延迟说明 数据库用什么做搜索引擎 数据库打开后乱七八糟 计算机网络技术社会实践日志 低配服务器快速跑五国补丁 软件开发的意义解决服务瓶颈 车贷服务软件开发 服务器关闭防火墙策略还有效么 数据库中如何生成新表 利泰网络技术 杭州首传网络技术有限公司 网络安全管理的思考 证券软件开发需要了解哪些业务 软件开发组长岗位职责 网络安全是基础税收 中华网络安全法施行时间 南充大黄蜂网络技术有限公司 邯郸项目软件开发靠谱吗 如何查看数据库表某一行内容 软件开发前需要做什么 辽宁立体化软件开发包括哪些 对日软件开发是什么意思呀 为什么数据库字段不都加上索引 微信软件开发项目成本 网络安全采访稿表态总结 防诈骗网络安全心得体会1200 服务器未回应设备管理 网络安全 认证服务平台
0