`
jtlyuan
  • 浏览: 66752 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

适配器--Adapter

 
阅读更多

问题引出:大家生活中可能碰到的一个问题就是你新买的手机自带的耳机是2.5接口的,不幸的是有一天你的耳机坏了,你去市面上根本就找不到2.5的耳机了,基本上是3.5接口了,没办法你只好买了个3.5接口的耳机,老板告诉你:“我给你一个适配器”这不问题就解决了。

问题分析:3.5的接口的耳机在你手机上本来是没法使用的,因为它没有按照2.5接口的设计啊,而现在我又想使用这幅耳机,于是乎有了“适配器(Adapter)”这个一个东西出来了。

Adapter模式的定义:把一个类的接口变换成客户端所期待的另外一种接口,使得原本由于接口不兼容而不能再一起工作的那些类可以一起工作。

适配器模式分类:1.类的适配器模式(采用继承实现)2.对象适配器(采用对象组合方式实现)

类的适配器类图:

 

 

 


 

 

 

 

 

 

模式的构成:以问题中例子为模型

目标抽象角色(Target):定义客户所期待要使用的接口,我们把手机当做客户端,客户端所需要使用的耳机的接口是2.5的,在这里就可以抽象出来一个2.5接口的设备(并不一定是耳机)。

源角色(Adaptee):需要被适配的接口,在这里指的是我们从市场上买回来的那个3.5接口的耳机。

适配器角色(Adapter)用来把源接口转换成符合要求的目标接口的设备,在这里指的是老板送给我们的那个“转换器”。

客户端(Client)这里指的就是那个给我们带来麻烦的手机喽。

示例代码:

 

  1. //Target   
  2.   
  3. package pattern.adapter;   
  4.   
  5. public interface Target {   
  6.   
  7.     public void provide2_5();   
  8.   
  9. }   
  10.   
  11. //Adaptee   
  12.   
  13. package pattern.adapter;   
  14.   
  15. public class Adaptee {   
  16.   
  17.     public void provide3_5(){   
  18.   
  19.        System.out.println("我是一个3.5的接口哦");   
  20.   
  21.     }   
  22.   
  23. }   
  24.   
  25. //Adapter   
  26.   
  27. package pattern.adapter;   
  28.   
  29. public class Adapter extends Adaptee implements Target {   
  30.   
  31.     @Override  
  32.   
  33.     public void provide2_5() {   
  34.   
  35.        this.provide3_5();   
  36.   
  37.     }   
  38.   
  39. }   
  40.   
  41. //Client   
  42.   
  43. package pattern.adapter;   
  44.   
  45. public class CellPhoneClient {   
  46.   
  47.     public static void main(String[] args) {   
  48.   
  49.        Target target = new Adapter();   
  50.   
  51.        //该手机只支持2.5接口的耳机   
  52.   
  53.        target.provide2_5();   
  54.   
  55.     }   
  56.   
  57. }  
//Target

package pattern.adapter;

public interface Target {

    public void provide2_5();

}

//Adaptee

package pattern.adapter;

public class Adaptee {

    public void provide3_5(){

       System.out.println("我是一个3.5的接口哦");

    }

}

//Adapter

package pattern.adapter;

public class Adapter extends Adaptee implements Target {

    @Override

    public void provide2_5() {

       this.provide3_5();

    }

}

//Client

package pattern.adapter;

public class CellPhoneClient {

    public static void main(String[] args) {

       Target target = new Adapter();

       //该手机只支持2.5接口的耳机

       target.provide2_5();

    }

}

 输出结果

我是一个3.5的接口哦

 

从输出结果可以看出只支持2.5接口的手机成功的使用3.5的耳机了。这就是适配器模式的作用。

 

 

      优势和缺陷:

       适配器模式可以将一个类的接口和另一个类的接口匹配起来,使用的前提是你不能或不想修改原来的适配器母接口。

  

         应用情景:

        1、对象需要利用现存的并且接口不兼容的类。

        2、你需要参加可重用的类以协作其他接口不一定兼容的类。

        3、你需要使用若干个现存的子类但不想派生这些子类的每个接口。

 

 

 

 

连接参考:http://lhbsmile.blog.163.com/blog/static/857031772009111123721557/

 

  • 大小: 22.8 KB
分享到:
评论

相关推荐

    Oracle Solaris 9 - Platform Notes: SunFDDI Adapter-42

    Oracle Solaris 9 平台备注:SunFDDI适配器-42 在 Oracle Solaris 9 操作系统中,SunFDDI 适配器-42 是一款高性能的网络适配器,提供了高速的数据传输能力。下面是关于 SunFDDI 适配器-42 的详细信息: 概述 ...

    Python库 | nonebot-adapter-cqhttp-2.0.0a14.tar.gz

    nonebot-adapter-cqhttp是NoneBot框架的一个适配器,NoneBot是一个基于事件驱动的、高度可扩展的Python聊天机器人框架。适配器的作用在于将NoneBot与不同的通讯协议接口连接,而cqhttp则是腾讯QQ的HTTP插件,允许...

    6-ListView-自定义适配器-进阶3.rar

    自定义适配器(Adapter)是将数据与ListView视图绑定的关键组件,能够帮助开发者灵活地展示各种复杂的数据结构。本教程“6-ListView-自定义适配器-进阶3”深入探讨了如何在ListView中使用自定义适配器进行高级定制。...

    windows虚拟网卡适配器tap-windows-9.21.1.exe

    虚拟网络适配器TAP-Windows Adapter V9下载、windows虚拟网卡适配器下载

    PyPI 官网下载 | nonebot-adapter-feishu-2.0.0a13.tar.gz

    本文将深入探讨与“nonebot-adapter-feishu-2.0.0a13.tar.gz”相关的知识,包括nonebot适配器、Feishu(飞书)集成以及Python包管理。 nonebot是一个强大的基于事件驱动的Python聊天机器人框架,它允许开发者轻松...

    canal.adapter-1.1.6.zip

    【标题】"canal.adapter-1.1.6.zip" 提供的是Canal适配器的1.1.6版本,这是一个与数据库变更日志相关的软件组件。 【描述】"canal.adapter-1.1.6.zip" 指出这个压缩包包含的是Canal适配器的特定版本1.1.6,它是一个...

    enzyme-adapter-react-17:React 17 for Enzyme 的非官方适配器

    @wojtekmaj/enzyme-adapter-react-17 React 17 for 非官方适配器。安装 npm install --save-dev @wojtekmaj/enzyme-adapter-react-17或者,如果您使用的是 Yarn: yarn add --dev @wojtekmaj/enzyme-adapter-react-...

    chartjs-adapter-date-fns:适用于Chart.js的date-fns适配器

    npm install date-fns chartjs-adapter-date-fns@next --save import { Chart } from 'chart.js' ; import 'chartjs-adapter-date-fns' ; CDN 默认情况下, ...

    codelab-adapter-4_9_1-win.zip

    《codelab-adapter-4.9.1:探索Scratch3编程的得力助手》 在编程教育领域,Scratch3作为一款深受广大师生喜爱的可视化编程工具,以其直观易懂的图形化编程界面,为初学者提供了极好的学习平台。而codelab-adapter-...

    chartjs-adapter-luxon:用于Chart.js的Luxon适配器

    chartjs-adapter-luxon 概述 此适配器允许将Luxon与Chart.js一起使用。 Luxon为时区和国际化提供内置支持。 需要 2.8.0或更高版本以及 1.0.0或更高版本。 注意:一旦加载,此适配器将覆盖Chart.js中提供的默认日期...

    设计模式之 适配器 Adapter C++ 源码

    设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...

    keycloak-saml-adapter-core-2.0.0.Final.zip

    【标题】"keycloak-saml-adapter-core-2.0.0.Final.zip" 提供的是Keycloak SAML适配器的核心组件,版本为2.0.0.Final。Keycloak是一个开源的身份和访问管理解决方案,它允许组织保护Web应用程序和服务免受未经授权的...

    前端项目-webrtc-adapter.zip

    "adapter-master"通常代表这是项目的主分支或者源码仓库,可能是从GitHub等代码托管平台下载的。"master"分支通常是开发的主要分支,包含了项目最新的稳定版本。 **知识点详细说明:** 1. **WebRTC技术**:WebRTC...

    alertmanager-webhook-adapter

    alertmanager-webhook适配器特征支持微信集团机器人/企业微信群机器人支持Dingtalk Group Bot /钉钉群机器人支持飞书集团Bot /飞书群机器人支持微信应用/企业微信应用即将有更多...跑步生成并运行$ cd cmd/alert...

    通用的adapter适配器

    本项目“通用的adapter适配器”旨在提供一个适用于ListView和GridView的多功能适配器,简化了开发者在处理列表或网格视图时的数据绑定工作。下面我们将深入探讨这个通用适配器的核心概念、实现方式以及它在实际开发...

    PROFIBUS通讯适配器RPBA-01手册.pdf

    ### PROFIBUS通讯适配器RPBA-01手册知识点概览 #### 一、概述与安全须知 - **标题**: "PROFIBUS通讯适配器RPBA-01手册.pdf" - **描述**: 此文档为ABB RPBA-01 PROFIBUS DP适配器的手册,详细介绍了该适配器的功能...

    TrakHound-MTConnect-Adapter-Simulator.rar_MTConnect Adapter_MTco

    MTConnect适配器数据仿真器,可以生成模拟数据。

    vue-material-adapter-Vue.js的材料组件的集成,遵循Google建议的最佳实践:使用基础和适配器-Vue.js开发

    Google建议的做法:使用基础和适配器该项目旨在在易于使用和自定义之间找到适当的平衡,同时坚持Vue精神(可实现,多功能和高性能)。安装$ npm install vue-material-adapter发行说明v0。 16.0-此版本面向material...

    前端开源库-pouchdb-adapter-fs

    然而,PouchDB提供了一个名为`pouchdb-adapter-fs`的适配器,它允许我们在前端利用`fs`模块(通常在Node.js环境下使用)来存储PouchDB数据库。 `pouchdb-adapter-fs`的核心功能是将PouchDB的数据存储在本地文件系统...

    PC-Adapter-USB-A2驱动程序-链接地址.txt

    PC-Adapter-USB-A2驱动程序-链接地址

Global site tag (gtag.js) - Google Analytics