适配器Adapter[通俗易懂]

适配器Adapter[通俗易懂]适配器Adapter动机模式定义实例结构要点总结笔记动机在软件系统中,由于应用环境的变化,常常需要将”一些现存的对象”放在新的环境中应用.但是新的环境要求的接口是这些现存对象所不满足的.如何应对这种”迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?模式定义将一个类的接口转换为客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作实例//目标接口(新接口)class ITarget{public: vir

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

动机

在软件系统中,由于应用环境的变化,常常需要将”一些现存的对象”放在新的环境中应用.但是新的环境要求的接口是这些现存对象所不满足的.

如何应对这种”迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?

模式定义

将一个类的接口转换为客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作

实例

//目标接口(新接口)
class ITarget{ 
   
public:
    virtual void process() = 0;
}

//遗留接口
class IAdaptee{ 
   
public:
    virtual void foo(int data) = 0;
    virtual int bar() = 0;
}
//遗留类
class OldClass : IAdaptee{ 
   
public:
public:
    void foo(int data){ 
   
        //..
    };
    int bar(){ 
   
        //..
    };
}
//对象适配器
class Adapter : public ITarget{ 
    //对象
protected:
    IAdaptee* pAdaptee; //组合
public:

    Adapter(IAdaptee *PAdaptee){ 
   
        this->pAdaptee = pAdaptee;
    }
    virtual void process(){ 
   
        int data = pAdaptee->bar();
        pAdatee->foo(data);
    }
}

//类适配器
class Adapter : public ITarget,protected OldClass//多继承,这样不好 因为类被写死了
{ 
   
}

int main(){ 
   
    IAdaptee* pAdaptee = new OldClass();

    ITarget *pTarget = new Adapter(pAdaptee);
    pTarget->process();
}


结构

在这里插入图片描述

要点总结

  • Adapter 模式主要是应用于”希望复用一些现存的类.但是接口与服用环境要求不一样的情况”,在遗留代码复用,类库迁移方面非常有用
  • GoF23定义了两种Adapter模式的实现接口:对象适配器和类适配器.但类适配器采用”多继承”的实现方式,一般不推荐使用,对象适配器采用”对象组合”的方式,更符合松耦合精神
  • Adapter模式可以实现的非常另外,不必拘泥于Gof23中定义的两种接口.例如,完全可以将Adapter模式中的”现存对象”作为新的接口方法参数,来达到适配器目的

笔记

  • 适配器得能适配 有内在实现层面的关联性 有内在功能的可复用性 ,可以把Adaptee转换为Itarget
  • stl中的queue内部使用的就是deque
  • Adapter就是把老接口转换成新接口
  • 很多时候设计模式不能和结构体一摸一样 要灵活使用
  • 不见得代码的设计和类图一一对应,设计模式对变换点 解决问题的手法 应用场景是否符合设计模式的定义 如果符合就是这个设计模式
  • 软件行业的FrameWork经常能看到有Adapter
  • 对象适配器就是组合对象
  • public继承是符合他的接口规范 protected和private继承是实现继承 用它的实现
  • 一般不使用类适配器 只使用 对象适配器
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168503.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webstorm 格式化代码(CTR+ALT+L)快捷键失效?

    webstorm 格式化代码(CTR+ALT+L)快捷键失效?使用CTR+ALT+L格式化代码时,会去执行QQ的快捷键,从而导致webstorm的快捷键失效解决方法是,将QQ的快捷键去除或更改:转载于:https://www.cnblogs.com/pfcan66/p/11270117.html…

    2022年5月3日
  • linux pycharm激活码[免费获取][通俗易懂]

    (linux pycharm激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
  • sublime text3激活码-激活码分享

    (sublime text3激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
  • Java8学习笔记(一)–Lambda表达式

    Java8学习笔记(一)–Lambda表达式两个概念函数式接口函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:L

    2022年8月3日
  • centos安装mysql客户端安装_CENTOS安装MYSQL

    centos安装mysql客户端安装_CENTOS安装MYSQL1[root@localhost~]#yuminstallmysql-server注意:此处错误提示为安装失败。原因:CentOS7自带有MariaDB而不是MySQL,MariaDB和MySQL一样也是开元的数据库解决方案:如果必须要安装MySQL,首先必须添加mysql社区repo通过输入命令:sudorpm-Uvhhttp://dev.mysql.com/get/mysql-c…

    2022年6月26日
  • 设备管理器里“SM总线控制器”、“其它PCI桥设备”驱动有问题[通俗易懂]

    设备管理器里“SM总线控制器”、“其它PCI桥设备”驱动有问题[通俗易懂]WinXP重装系统后设备管理器里面出现黄色问号。各自是“SM总线控制器”和“其它PCI桥设备“,主板是七彩虹的,芯片组是geForce7025的,南桥是nForce630a,用七彩虹官网的主板驱动装了没用。用驱动人生先备份还有一个相同主板的机器的驱动。得到 NVIDIAnForcePCISystemManagement_*.zip, NVIDIANetworkBus…

    2022年5月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号