适配器模式动机

能够使类和对象结合到一起形成更大的结构。
能够使原来不兼容的事物可以一起工作,这个新的设备称为适配器。

就像我们买的有些平板没有耳机插孔,就需要一个充电器插口转接耳机插口的一个适配器。以前的sd卡无法直接插到电脑上实现直接的文件转储功能,这时候如果有一个读卡器,就能实现sd卡与电脑的连接,让这两个设备能够一起工作,这个读卡器就是一个适配器。


适配器模式定义

适配器模式(Adapter Patter)定义:将一个接口转换成用户希望的另一个接口,适配器模式使接口不兼容的那些类一起工作,其别名为包装器(Wrapper)。

适配器模式结构与分析

适配器模式包含如下角色

1.Target(目标抽象类)
目标抽象类定义客户要用的特定领域的接口,可以是个抽象类接口,也可以是个具体类。

2.Adapter(适配器类)
适配器类可以调用另一个接口,作为一个转换器,对也Adaptee和Target进行适配。适配器Adapter是适配器模式的核心。
类适配器中,它通过实现Target接口并继承Adapter类来使两者产生联系;
对象适配器中,它通过继承Target并关联一个Adapter对象使两者产生联系。

3.Adaptee(适配者类)
适配者即被适配的角色,它定义一个已经存在的接口,这个接口需要适配。适配者类一般是一个具体类,它包含客户希望使用的业务方法。

4.Client(客户类)
在客户类中针对目标抽象类进行编程,调用在目标抽象类中定义的业务方法。

类适配器结构图

对象适配器结构图

实例:类适配器

我们想构建一个适配器,让耳机与只有充电器插孔的平板一起工作,也就是说,构建一个充电孔转耳机孔的适配器。

uml图

代码

AirPlus 类 (Adaptee(适配者类)):
耳机类只有听的方法

public class AirPlus {public void listen() {System.out.print("听.....");}
}

Ipad类(Target(目标抽象类)):
ipad只有充电的方法

public interface Ipad {public void chongdian();//平板只有充电器接口
}

IpadAdapter类(Adapter(适配器类)):
当用户使用充电器接口的时候,适配器调用的是调用耳机的方法,实现平板与耳机能够一起工作

public class IpadAdapter extends AirPlus implements Ipad{public void chongdian() {System.out.print("使用平板");super.listen();//调用耳机的听的方法,相当于不同插头的转接}
}

Client类:

public class Client {public static void main(String[] args) {// TODO Auto-generated method stubAirPlus airplus=new AirPlus();Ipad i=new IpadAdapter();i.chongdian();}}

运行截图

实例:对象适配器

uml图

代码

AirPlus 类(Adaptee(适配者类)):
耳机类只有听的方法

public class AirPlus {public void listen() {System.out.print("听.....");}
}

Ipad类(Target(目标抽象类)):
ipad只有充电的方法

public abstract class Ipad {public abstract void chongdian();//平板只有充电器接口
}

IpadAdapter类(Adapter(适配器类)):
当用户使用充电器接口的时候,适配器调用的是调用耳机的方法,实现平板与耳机能够一起工作

public class IpadAdapter extends Ipad{private AirPlus airplus;public IpadAdapter() {airplus=new AirPlus();}public void chongdian() {System.out.print("使用平板");airplus.listen();//调用耳机的听的方法,相当于不同插头的转接}
}

Client类:

public class Client {public static void main(String[] args) {// TODO Auto-generated method stubIpad i=new IpadAdapter();i.chongdian();}}

运行截图

适配器模式扩展

缺省适配器模式

缺省适配器模式是适配器模式的一种变形,但其使用也非常广泛。
缺省适配器模式(Default Adapter Pattern)定义:当不需要全部实现接口提供的方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),n那么该抽象类的子类可以有选择的覆盖父类的某些方法来实现需求。
适用于一个接口不想使用其所有方法的情况,因此也称为单接口适配器模式。

双向适配器

在对象适配器的使用中,如果在适配器中同时包含目标类和适配器的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配器者类中的方法,那么适配器是一个双向适配器。


适配器模式优缺点

适配器模式优点:将目标类和适配器类解耦,增加了类的复用性和透明性,同时系统的灵活性和扩展性都非常好,更换适配器或者增加新的适配器都非常方便,符合“开闭原则”。

适配器模式缺点
类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类;
对象适配器模式的缺点是很难置换适配者类的方法。


原创不易,如果对您有帮助,点个赞再走吧✧*。٩(ˊᗜˋ*)و✧*。谢谢~

设计模式之适配器模式--简单实例分析相关推荐

  1. php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】

    本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...

  2. Python正则简单实例分析

    本文实例讲述了Python正则简单用法.分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题: re.split('(\W ) ...

  3. 【Twitter Storm系列之三】 storm简单实例分析

    实例来自书籍<Oreilly.Getting.Started.with.Storm.Aug.2012> 先讲下我们这次所需涉及到的概念:Topology.Spout.Blot Topolo ...

  4. SAXReader简单实例分析

    使用SAXReader需要导入dom4j-full.jar包. dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API, ...

  5. php适配模式实例,php适配器模式简单应用示例

    本文实例讲述了php适配器模式简单应用.分享给大家供大家参考,具体如下: 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独 ...

  6. 《简明电路分析》——1.6节简单电路分析实例

    本节书摘来自华章社区<简明电路分析>一书中的第1章,第1.6节简单电路分析实例,作者钟洪声 吴 涛 孙利佳,更多章节内容可以访问云栖社区"华章社区"公众号查看 1.6 ...

  7. python线性回归算法简介_Python实现的简单线性回归算法实例分析

    本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > ...

  8. 通过一个对数据的存储和分析的简单实例初识Hadoop

    对于一个刚刚接触Hadoop的菜鸟来说,Hadoop的概念还是挺抽象的,而且这个技术刚刚兴起,除了阿里巴巴,腾讯.中国移动这些技术实力非常强而且需要对数据进行海量存储的公司对Hadoop技术有一些初步 ...

  9. Fluent离散相模型分析操作简单实例

    Fluent离散相模型分析操作简单实例 前言 离散相是用于拉格朗日参考系下粒子/液滴/气泡轨迹的计算,连续气体相中,粒子可以传递热,质量和动量,每条轨迹是由一系列初始属性相同的粒子组成.多应用于气旋. ...

最新文章

  1. Kali Linux攻防系统(一:攻防系统Kali Linux下载安装与更新)
  2. \x49\x51\x5a\x56\x54\ 这种是什么编码?(16进制编码)
  3. 网站运营之做到SEO操作视频教程【21讲】
  4. JAVA中数字格式异常,java - Java数字格式异常 - 堆栈内存溢出
  5. case when then的用法-leetcode交换工资
  6. js工作笔记003---js编写习惯_提高网页显示速度
  7. 系统功能调用DOS中断INT 21H功能包单字符输入01单字符输出02字符串输入0a字符串输出09
  8. matlab实现一阶低通滤波器,matlab仿真一阶低通滤波器幅频特性和相频特性[计算机类]...
  9. Ubuntu 20.04 安装 Google 拼音输入法
  10. delete语句详解
  11. Dell IDRAC服务器重装系统详解(远程连接)
  12. python爬数据是什么意思-爬数据是什么意思?
  13. 计算机驱动程序恢愎,如果意外卸载了计算机鼠标驱动程序,该怎么办_解决方案,以不小心卸载鼠标驱动程序...
  14. C++实现贪吃蛇游戏
  15. miui 10 android 9,MIUI10开发版8.12.13发布 基于Android 9.0 小米Max3已更新
  16. /var/tmp/rpm-tmp. 安装失败时找不到tmp文件的应对方法
  17. 精度检验方法(之二分类)
  18. 自动化立体仓库使用流程!海格里斯自动化立体库流程:入库——出库——拣选
  19. PS创建选区的工具-----快速选择和魔棒
  20. TX2安装opencv3.4.0

热门文章

  1. P5030 长脖子鹿放置
  2. 现在学java好还是python好,java好学还是python好学
  3. 【封神台 - 掌控安全靶场】尤里的复仇 Ⅰ 小芳!一二三四五六七章
  4. 微信小程序的分享链接
  5. Excel统一添加前缀与后缀
  6. 使用Arcmap将WGS84坐标转换成国家大地坐标系2000
  7. 设计模式 -- 门面模式
  8. Yocto系列讲解[理论篇] 3 - meta layer recipe class概念介绍
  9. 涵盖多场景区块链与政务结合 应用前景广阔
  10. 如何批量修改拼多多价格?基于按键精灵实现--拼多多改价精灵