精华内容
下载资源
问答
  • 适配器模式暂且不聊,先聊一下生活中常见的适配器有哪些: 网线转接头: 现在的笔记本越做越薄,厂家甚至直接取消了传统的网线接口,导致网线不能直接插在电脑上,至于需要插网线的时候,我们就需要另购网线转接头...

    什么是适配器模式

    适配器模式暂且不聊,先聊一下生活中常见的适配器有哪些:

    网线转接头:

    现在的笔记本越做越薄,厂家甚至直接取消了传统的网线接口,导致网线不能直接插在电脑上,至于需要插网线的时候,我们就需要另购网线转接头,网线插在转接头上之后,另一端通过usb或者雷电接口连接电脑。

    变压器:

    已知家庭用电都是220v的,但是国家电网向各个城市的变电站输送的可不止220v,各个变电站第一次变压后向各个城区或者小区输送用电的也是大于220v的电压,经过各地区或者小区的变压器最后变压后才到了家庭用电的标准220v。

    以上的转接头和变压器就是典型的适配器行为,把原本不能直接使用的事物通过某种适配器的代理,变成可以供使用者直接使用的事物,提供给使用者消费。

    在编程中适配器模式就是这种思想的体现:有一个方法,可能由于参数列表字段的原因,不能被调用者直接使用,通过一个中间层,也就是适配器,来包装这个方法,并且提供匹配调用者要求的方法供调用者使用,这样就达到了适配的目的。

    类适配器

    最简单的适配器模式思想实现:类适配器

    以网线转接头场景为例

    网线:提供上网能力,所以网线就是被适配对象

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo1;
    
    /**
     * @ClassName CableInternet
     * @Description: 网线
     * @Author LeoLee
     * @Date 2020/11/18
     * @Version V1.0
     **/
    public class CableInternet {
    
        public void connectToInternet() {
            System.out.println("成功连接网络");
        }
    }
    

    适配器抽象类:将网线的上网能力进行一个抽象

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo1;
    
    //适配器
    public interface Adapter {
    
        public void usbToCableInternet();
    }
    

    具体的适配器:也就是真正实现适配能力的类,实现适配器抽象类,因为需要通过该适配器使用网线的上网能力,所以继承网线类,获得父类的上网能力

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo1;
    
    
    /**
     * @ClassName CableInternetAdapter
     * @Description: TODO
     * @Author LeoLee
     * @Date 2020/11/18
     * @Version V1.0
     **/
    public class CableInternetAdapter extends CableInternet implements Adapter {
    
        @Override
        public void usbToCableInternet() {
            super.connectToInternet();
        }
    }
    

    电脑:需要获取上网能力,适配器的使用者。由于可能会有很多品牌或者很多种类型的适配器都能满足网线转接头的代理需求,所以这里请求上网方法使用的是适配器抽象类,方便接收不同的适配器

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo1;
    
    /**
     * @ClassName Computer
     * @Description: TODO
     * @Author LeoLee
     * @Date 2020/11/18
     * @Version V1.0
     **/
    public class Computer {
    
        //请求上网
        public void net(Adapter adapter) {
    
            adapter.usbToCableInternet();
        }
    }
    

    测试

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo1;
    
    /**
     * @ClassName Test
     * @Description: TODO
     * @Author LeoLee
     * @Date 2020/11/18
     * @Version V1.0
     **/
    public class Test {
    
        public static void main(String[] args) {
            Computer computer = new Computer();
            computer.net(new CableInternetAdapter());
        }
    }
    

    对象适配器

    类适配器有个明显的缺点,适配器继承了网线才获取的上网能力,这样就不方便之后的拓展,耦合性太高,设计模式种能不使用继承就不要使用继承。不符合里氏替换原则,所以对象适配器使用的是组合形式来获取网线的上网能力

    改造类适配器代码如下:

    具体的适配器不再继承网线类,而是将网线类作为一个变量,通过构造方法的形式对该变量进行赋值

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo2;
    
    /**
     * @ClassName CableInternetAdapter
     * @Description: TODO
     * @Author LeoLee
     * @Date 2020/11/18
     * @Version V1.0
     **/
    public class CableInternetAdapter implements Adapter {
    
        private CableInternet cableInternet;
    
        public CableInternetAdapter(CableInternet cableInternet) {
            this.cableInternet = cableInternet;
        }
    
        @Override
        public void usbToCableInternet() {
            cableInternet.connectToInternet();
        }
    }
    

    测试

    package com.leolee.createObjectPattern.decorator.surfInternetDemo.demo2;
    
    /**
     * @ClassName Test
     * @Description: TODO
     * @Author LeoLee
     * @Date 2020/11/18
     * @Version V1.0
     **/
    public class Test {
    
        public static void main(String[] args) {
            Computer computer = new Computer();
            computer.net(new CableInternetAdapter(new CableInternet()));
        }
    }
    

     

     

     

    展开全文
  • 大家都知道电源适配器有着不同的类型和不同的接口,那么常见的电源适配器接口类型有哪些呢?下面就跟随小编一起来了解下吧! 1、串行接口 串行接口,简称串口,也就是COM接口,是采用串行通信协议的扩展接口。串口...

      大家都知道电源适配器有着不同的类型和不同的接口,那么常见的电源适配器接口类型有哪些呢?下面就跟随小编一起来了解下吧!

      1、串行接口

      串行接口,简称串口,也就是COM接口,是采用串行通信协议的扩展接口。串口的出现是在

      1980年前后,数据传输率是115kbps~230kbps,串口一般用来连接鼠标和外置Modem以及老式

      摄像头和写字板等设备,目前部分新主板已开始取消该接口。

      2、并行接口

      并行接口,简称并口,也就是LPT接口,是采用并行通信协议的扩展接口。并口的数据传输

      率比串口快8倍,标准并口的数据传输率为1Mbps,一般用来连接打印机、扫描仪等。所以并口又被称为打印口。

      3、USB接口

      USB是英文Universal Serial Bus的缩写,中文含义是“通用串行总线”。它不是一种新的总线标准,而是应用在PC领域的接口技术。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。

      所有支持USB 1.1的设备都可以直接在USB 2.0的接口上使用而不必担心兼容性问题,而且像USB线、插头等等附件也都可以直接使用。USB接口有3种类型:

      - Type A:一般用于PC

      - Type B:一般用于USB设备

      - Mini-USB:一般用于数码相机、数码摄像机、测量仪器以及移动硬盘等

      目前的主板一般都采用支持USB功能的控制芯片组,主板上也安装有USB接口插座,而且除了背板的插座之外,主板上还预留有USB插针,可以通过连线接到机箱前面作为前置USB接口以方便使用(注意,在接线时要仔细阅读主板说明书并按图连接,千万不可接错而使设备损坏)

    12f16b3a4194bd932a5976a96e117c12.png

    展开全文
  •   apapter使数据绑定到控件变得更加简单和灵活...用途为容器提供子视图,利用视图数据和元数据来构建每个子视图。 arrayAdapter,simpleCursorAdapter,...如果需要自定义适配器可以扩展抽象类BaseAdapter.
    
           apapter使数据绑定到控件变得更加简单和灵活...用途为容器提供子视图,利用视图的数据和元数据来构建每个子视图。
    有arrayAdapter,simpleCursorAdapter,cursorAdapter
    resourceCursorAdapter
    如果需要自定义适配器可以扩展抽象类BaseAdapter.
    展开全文
  • 前言《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容:该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范)该模式的代码示例:熟悉该模式的代码长什么样子该模式...
    20c15b856211b486905c9bcfa6145ea4.png

    前言

    《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有:

    • 该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范)
    • 该模式的代码示例:熟悉该模式的代码长什么样子
    • 该模式的优缺点:模式不是万金油,不可以滥用模式
    • 该模式的实际使用案例:了解它在哪些重要的源码中被使用

    该系列会逐步更新于我的博客和公众号(博客见文章底部),也希望各位观众老爷能够关注我的个人公众号:后端技术漫谈,不会错过精彩好看的文章。

    系列文章回顾

    • 【设计模式自习室】开篇:为什么我们要用设计模式?
    • 【设计模式自习室】建造者模式
    • 【设计模式自习室】原型模式
    • 【设计模式自习室】透彻理解单例模式
    • 【设计模式自习室】理解工厂模式的三种形式

    结构型——适配器模式

    引子

    当你从中国到国外旅游时,经常会购买一个电源适配器,也就是电源转接头,因为国外的插座经常无法适用于国内的插头,这个电源转接头就是一个适配器,也就是下图中的Adapter,它让你的插头能够正常的在国外使用。

    客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。

    9145317f750b21e08012129a7f0220be.png

    定义

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作

    适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。

    1. 类适配器

    创建新类,继承源类,同时还要实现新接口

    class  adapter extends oldClass implements newFunc{}

    2. 对象适配器

    创建新类的实例,其中包含旧的类,并实现新接口

    class adapter implements newFunc { private oldClass oldInstance ;}
    • 类适配器使用对象继承的方式,是静态的定义方式
    • 对象适配器使用对象组合的方式,是动态组合的方式。

    类图

    如果看不懂UML类图,可以先粗略浏览下该图,想深入了解的话,可以继续谷歌,深入学习:

    120f43051180e59aade943ff7a008def.png

    适配器模式包含如下角色:

    • Target:目标抽象类:这就是所期待得到的新接口类。
    • Adapter:适配器类:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。
    • Adaptee:适配者类:等待适配的旧类
    • Client:客户端调用者

    1. 类适配器

    9827245bf26c50a3a1c5b59e244ef0e0.png

    2. 对象适配器

    306a329a3831c55c6095b778820d4b02.png

    时序图

    时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。

    我们可以大致浏览下时序图,如果感兴趣的小伙伴可以去深究一下:

    69a073a31c28a959c991da609ecab193.png

    代码示例/使用场景举例

    这次我将代码示例和使用场景两个章节合起来讲,是因为有一个十分典型的Java 源码可以学习

    1. Java容器中的Enumeration老接口和Iterator新接口

    JDK1.1 之前提供的容器有Arrays,Vector,Stack,Hashtable,Properties,BitSet,其中定义了一种访问群集内各元素的标准方式,称为 Enumeration(列举器)接口。

    JDK1.2 版本中引入了 Iterator接口,新版本的集合对(HashSet,HashMap,WeakHeahMap,ArrayList,TreeSet,TreeMap, LinkedList)是通过 Iterator 接口访问集合元素。

    这样,如果将老版本的程序运行在新的 Java 编译器上就会出错。因为 List 接口中已经没有 elements(),而只有 iterator() 了。那么如何将老版本的程序运行在新的 Java 编译器上呢? 如果不加修改,是肯定不行的,但是修改要遵循“开-闭”原则我们可以用 Java 设计模式中的适配器模式解决这个问题。

    public class EnumIter implements Iterator {//重点1:配器实现目标接口   private Enumeration e;//重点2:适配器持有被适配接口(对象)的引用   public EnumIter(Enumeration e){       this.e = e;   }   //将对目标对象的调用转发给真正的被适配的对象   public boolean hasNext() {       return e.hasMoreElements();   }   public Object next() {       return e.nextElement();   }   public void remove() {   }}

    NewEnumeration 是一个适配器类,通过它实现了从 Iterator 接口到 Enumeration 接口的适配,这样我们就可以使用老版本的代码来使用新的集合对象了。

    2. JDBC也是一种适配器模式

    Sun公司在1996年公开了Java语言的数据库连接工具JDBC,JDBC使得Java语言程序能够与数据库连接,并使用SQL语言来查询和操作数据。JDBC给出一个客户端通用的抽象接口,每一个具体数据库引擎(如SQL Server、Oracle、MySQL等)的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器软件。抽象的JDBC接口和各个数据库引擎API之间都需要相应的适配器软件,这就是为各个不同数据库引擎准备的驱动程序。

    模式优缺点

    优点

    • 将目标类和适配者类解耦,而无须修改原有代码。
    • 对于客户端类来说是透明的,而且提高了适配者的复用性。

    类适配器模式还具有如下优点:

    由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

    对象适配器模式还具有如下优点:

    一个对象适配器可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

    缺点

    过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。

    因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

    总结

    建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。当然,具体问题具体分析,根据需要来选用实现方式,最适合的才是最好的。

    参考

    • https://www.jianshu.com/p/93821721bf08
    • https://github.com/CyC2018/CS-Notes/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20-%20%E9%80%82%E9%85%8D%E5%99%A8.md
    • 《HEAD FIRST 设计模式》
    • 《剑指offer》

    关注我

    我是一名后端开发工程师。

    主要关注后端开发,数据安全,爬虫,物联网,边缘计算等方向,欢迎交流。

    各大平台都可以找到我

    • 微信公众号:后端技术漫谈
    • Github:@qqxx6661
    • CSDN:@Rude3Knife
    • 知乎:@Zhendong
    • 简书:@蛮三刀把刀
    • 掘金:@蛮三刀把刀

    原创博客主要内容

    • Java面试知识点复习全手册
    • 设计模式/数据结构 自习室
    • Leetcode/剑指offer 算法题解析
    • SpringBoot/SpringCloud菜鸟入门实战系列
    • 爬虫相关技术文章
    • 后端开发相关技术文章
    • 逸闻趣事/好书分享/个人兴趣

    个人公众号:后端技术漫谈

    dfaa380b11d055b0bbcf034a90b9cbdb.png

    公众号:后端技术漫谈.jpg

    如果文章对你有帮助,不妨收藏,投币,转发,在看起来~

    展开全文
  • 《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容: 该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的代码示例:熟悉该模式的代码长什么样子...
  • 蓝牙作为一种小范围无线连接技术,能在设备间实现方便快捷、灵活安全、低成本、低...那么,我们经常用蓝牙,有哪些版本呢?蓝牙版本变化蓝牙1.1版本,传输率约为748~810kpbs,会受到同频率产品通讯干扰。蓝牙...
  • 常见的六种设计模式

    2019-09-26 01:59:48
    有哪些常见的设计模式: 单例模式: 工厂模式: builder模式: MVC模式 适配器模式: 观察者模式: 1.有哪些常见的设计模式: 在这里给出六种常见的设计模式,分别是: 单例模式,工厂...
  • 模板方法观察者模式Spring 事件驱动模型中的三种角色事件角色事件监听者角色事件发布者角色Spring 的事件流程总结适配器模式spring AOP中的适配器模式spring MVC中的适配器模式装饰者模式总结 JDK 中用到了那些设计...
  • 11.JDK 类库常用设计模式有哪些? 12.IO 使用了什么设计模式? 13.Spring 中都使用了哪些设计模式? 1.说一下设计模式?你都知道哪些? 答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式
  • 问题3-26:当我们在PC机插上以太网的适配器(网卡)后,是否还必须编制以太网所需的MAC协议的程序? 问题3-27:使用网络分析软件可以分析出所捕获到的每一个帧的首部中各个字段的值。但是有时却无法找出LLC帧首部的...
  • 设计模式可以分为哪几类,分别有哪些设计模式?(10分) 设计模式分为有创建型,结构型,和行为型。 创建型:单例设计模式,工厂设计模式,抽象工厂模式,建造者模式,原型模式 结构型:代理模式,组合模式,享元...
  • 1、三菱PLC什么是主机,什么是模块?例 三菱PLC-FX2N-128MR-001,本身点数128点,常用主机,可扩展最大点数256...2、三菱PLC-FX3U系列可编程控制器连接特殊适配器有哪些注意事项?三菱PLC-FX3U系列只使用特殊适...
  • 可能该书会很多人用得上,而本下载频道里已有的下载地址误且文件不可用,故而再次上传,以供需要者下载!(共21.53M,分三个下载文件) <br>内容简介 本书从大量E-mail和BBS中精心筛选了1000个问题,...
  •  异常表示程序运行过程中可能出现非正常状态,运行时异常表示虚拟机通常操作中可能遇到异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生非运行时异常,但是并不要求必须声明抛出未被捕获...
  • 提示“已网络适配器使用此地址” 93. 经常提示“你网线没有连接好” 94. 只能使用系统自带驱动 95. 更换PCI接口导致故障 96. 内置网卡不能上网 97. Windows XP上不能同时使用两块网卡 98. ...
  • 提示“已网络适配器使用此地址” 93. 经常提示“你网线没有连接好” 94. 只能使用系统自带驱动 95. 更换PCI接口导致故障 96. 内置网卡不能上网 97. Windows XP上不能同时使用两块网卡 98. ...
  • ADO.NET 方案示例:提供数据识别应用程序的常见编程方案示例,并使用 ADO.NET 提供这些方案解决方案。 检索“标识”或“自动编号”值:提供一个特定示例,它将为 Microsoft SQL Server 表中“标识”(Identity) ...
  • SSM 梳理 面试题整理

    2018-10-04 20:01:14
    该文档主要整理是SSM的常见面试题,包括一下内容: ...18. 使用 MyBatis mapper 接口调用时有哪些要求 19. mybatis缓存机制,一级,二级介绍一下。 20. 视图解析器本质是什么 21. 统一解决get乱码
  • 1.常见的设计模式有哪些 单例设计模式、工厂设计模式、抽象工厂设计模式、代理模式、观察者模式、适配器模式 2.虚拟内存地址和物理内存地址的区别,进程和线程哪个有虚拟内存地址 虚拟内存地址表示内存不够时,...
  • 文章内容症状原因本文介绍有关如何使用内部安装蓝牙适配器连接至戴尔...注:有关有哪些驱动程序以及为什么应该确保您拥有最新版本详情,请参阅戴尔知识库文章驱动程序和下载常见问题(英文版)。您可通过以下链接...
  • 目录介绍4.0.0.1 说一下Java IO里面的常见类,字节流,字符流、接口、实现类、方法阻塞?4.0.0.2 什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们...谈一谈IO流中用到的适配器模式和装饰者模式的作用优势?...
  • 04.JavaIO流问题

    2018-12-24 11:20:28
    目录介绍 4.0.0.1 说一下Java IO里面的常见类,字节流,字符流、接口、实现类、方法阻塞? 4.0.0.2 什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是...谈一谈IO流中用到的适配器模式和装饰者模式的...
  • 31、你知道Request对象主要方法有哪些? 32、J2EE是技术还是平台还是框架? 我答案: J2EE是技术也是平台 网上答案: J2EE本身是一个标准,一个为企业分布式应用开发提供标准平台。 J2EE也是一个...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

常见的适配器有哪些