首页 > 其他分享 >04.适配器模式

04.适配器模式

时间:2023-06-03 23:57:26浏览次数:48  
标签:Target 04 实现 适配 适配器 接口 模式 Adaptee

适配器模式的定义

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式的结构和说明

  • Client:客户端,调用自己需要的领域接口 Target。
  • Target:定义客户端需要的跟特定领域相关的接口。
  • Adaptee:已经存在的接口,通常能满足客户端的功能要求,但是接口与客户端要求的特定领域接口不一致,需要被适配。
  • Adapter:适配器,把Adaptee 适配成为 Client 需要的 Target。

示例代码

namespace NetCore3Console.Adapter
{
    /// <summary>
    /// 定义客户端使用的接口,与特定领域相关
    /// </summary>
    public interface Target
    {
        /// <summary>
        /// 示意方法,客户端请求处理的方法
        /// </summary>
        void Request();
    }

    /// <summary>
    /// 已经存在的接口,这个接口需要被适配
    /// </summary>
    public class Adaptee
    {
        /// <summary>
        /// 示意方法,原本已经存在,已经实现的方法
        /// </summary>
        public void SpecificRequest()
        {
            //具体的功能处理
        }
    }

    public class Adapter : Target
    {
        //持有需要被适配的接口对象
        private Adaptee _adaptee;

        public Adapter(Adaptee adaptee)
        {
            _adaptee = adaptee;
        }

        public void Request()
        {
            //可能转调已经实现了的方法,进行适配
            _adaptee.SpecificRequest();
        }
    }
}

认识适配器模式

模式的功能

适配器模式的主要功能是进行转换匹配,目的是复用已有的功能,而不是来实现新的接口。也就是说,客户端需要的功能应该是已经实现好了的,不需要适配器模式来实现,适配器模式主要负责把不兼容的接口转换成客户端期望的样子就可以了。

但这并不是说,在适配器里面就不能实现功能。适配器里面可以实现功能,称这种适配器为智能适配器。再说了,在接口匹配和转换的过程中,也有可能需要额外实现一定的功能,才能够转换过来,比如需要调整参数以进行匹配等。

Adaptee 和Target 的关系

适配器模式中被适配的接口 Adaptee 和适配成为的接口 Target 是没有关联的,也就是说,Adaptee 和 Target 中的方法既可以相同,也可以不同。极端情况下两个接口里面的方法可能是完全不同的,当然这种情况下也可以完全相同。

这里所说的相同和不同,是指方法定义的名称、参数列表、返回值,以及方法本身的功能都可以相同或不同。

对象组合

适配器的实现方式其实是依靠对象组合的方式。通过给适配器对象组合被适配的对象,然后当客户端调用 Target 的时候,适配器会把相应的功能委托给被适配的对象去完成。

适配器模式的实现

智能适配器

适配器也可以实现一些 Adaptee 没有实现,但是在 Target 中定义的功能。这种情况就需要在适配器的实现里面,加入新功能的实现。这种适配器被称为智能适配器。

适配多个 Adaptee

适配器在适配的时候,可以适配多个 Adaptee,也就是说实现某个新的 Target 的功能的时候,需要调用多个模块的功能,适配多个模块的功能才能满足新接口的要求。

双向适配器

适配器也可以实现双向的适配,前面我们讲的都是把Adaptee 适配成为 Target,其实也可以把 Target 适配成为 Adaptee。也就是说这个适配器可以同时当作 Target 和Adaptee 来使用。

对象适配器和类适配器

在标准的适配器模式里面,根据适配器的实现方式,把适配器分成了两种,一种是对象适配器,另一种是类适配器。

对象适配器的实现:依赖于对象组合。就如同前面的实现示例,都是采用对象组合的方式,也就是对象适配器实现的方式。

类适配器的实现:采用多重继承对一个接口与另一个接口进行匹配。由于 Java 不支持多重继承,所以到目前为止还没有涉及。

思考适配器模式

适配器模式的本质

适配器模式的本质是:转换匹配,复用功能.

适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。也就是说转换匹配是手段,而复用已有的功能才是目的。

在进行转换匹配的过程中,适配器还可以在转换调用的前后实现一些功能处理,也就是实现智能的适配。

标签:Target,04,实现,适配,适配器,接口,模式,Adaptee
From: https://www.cnblogs.com/huiteresa/p/17455041.html

相关文章

  • AtCoder Beginner Contest 304
    A-FirstPlayer(abc304a)题目大意依次给定每个人的姓名和年龄,排成一圈。从年龄最小的人依次输出姓名。解题思路找到年龄最小的,依次输出就好了。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_......
  • 04_深入浅出索引(上)
    04_深入浅出索引(上)‍索引的概念索引的概念:索引是一种数据结构,用于提高数据库查询效率。就像一本书的目录一样,索引可以帮助数据库在大量数据中快速找到需要的数据,减少查询时间和资源消耗。除了提高查询效率,索引还可以帮助数据库实现唯一性约束、主键约束和外键约束等数据完整性......
  • 迭代器模式
    TheIteratordesignpatternprovidesawaytoacesstheelementsofanaggregateobjectsequentiallywithoutexposingitsunderlyingrepresentation.迭代器模式提供了顺序访问聚合对象中元素的方式,而不需要暴露底层表示。 UMLClassDiagram Iterator;Thisisgo......
  • 状态模式
    TheStatedesignpatternallowsanobjecttoalteritsbehaviorwhenitsinternalstatechanges,Theobjectwillappeartochangeitsclass.状态设计模式允许当对象内部状态改变时改变其行为,对象似乎改变了它的类。UMLClassDiagram State:Thisisgoingtobea......
  • 享元模式
    TheFlyweightdesignpatternusessharingtosupportlargenumbersoffine-gainedobjectsefficiently.享元模式用共享有效支持大量细粒度的对象。UMLClassDiagram Flyweight:Theflyweightinterfaceenablessharingbutitdoesnotenforceit.Theconcreteobj......
  • 责任链模式
    TheChainofResponsibilitydesignpatternavoidscouplingthesenderoftherequesttoitsreceiverbygivingmorethanoneobjectachancetohandletherequest.Thispatternchainsthereceivingobjectsandpassestherequestalongthechainuntilano......
  • 命令模式
    TheCommanddesignpatternencapsulatesarequestasanobject,therebylettingyouparamizeclientswithdifferentrequests,queueorlogrequests,andsupportundoableoperations.命令模式封装请求作为一个对象,因此让你参数化客户端用不同的requests,队列或者日志r......
  • 解释器模式
    Givealanguage,theInterpreterdesignpatterndefinesarepresentationforitsgrammaralongwithaninterpreterthatusestherepresentationtointerpretsentencesinthelanguage.TheInterpreterDesignPatternprovidesawaytoevaluatelanguagegram......
  • 组合模式
    TheCompositedesignpatterncomposesobjectsintotreestructurestorepresentpart-wholehierarchies.Thispatternletsclientstreatindividualobjectandcompositionsofobjectsuniformly.组合模式将对象组合成tree结构代表部分-整体层次结构,这种模式允许客户......
  • 装饰器模式
    TheDecoratorDesignPatternattachesadditionalresponsibilitiestoanobjectdynamically.Thispatternprovideaflexiblealternativetosubclassingforextendingfunctionality.装饰器模式动态的给Object添加额外的职责,这个模式为SubClassing提供灵活的扩展功能。......