转载地址 https://sscloud.net/solution/jsp/article.jsp?articleId=10090

模式的定义与特点

23种设计模式demo下载

适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

该模式的主要优点如下。

  • 客户端通过适配器可以透明地调用目标接口。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。

其缺点是:对类适配器来说,更换适配器的实现过程比较复杂。

模式的结构与实现

类适配器模式可采用多重继承方式实现,如 C++ 可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口;Java 不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。

对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。现在来介绍它们的基本结构。

1. 模式的结构

适配器模式(Adapter)包含以下主要角色。

  1. 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  2. 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
  3. 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

类适配器模式的结构图如图 1 所示。


图1 类适配器模式的结构图

对象适配器模式的结构图如图 2 所示。

图2 对象适配器模式的结构图

模式的应用场景

适配器模式(Adapter)通常适用于以下场景。

  • 以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
  • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。

模式的扩展

适配器模式(Adapter)可扩展为双向适配器模式,双向适配器类既可以把适配者接口转换成目标接口,也可以把目标接口转换成适配者接口,其结构图如图 4 所示。


图4 双向适配器模式的结构图

模式实现代码:

/**
 * @author sscloud.net
 * @Date 2019年1月1日下午8:01:07
 * @Fun 适配器:对象适配器、类适配器、接口适配器
 **/
public class Demo {
public static void main(String[] args) {
//对象适配器
DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());
objAdapter.drawCircle();
objAdapter.drawRectangle(" in DrawAdapter4Object");

//类适配器
DrawAdapter4Class adapter4 = new DrawAdapter4Class();
adapter4.drawCircle();
adapter4.drawRectangle(" in DrawAdapter4Class ");

//接口适配器
MyDrawAdapter adapter = new MyDrawAdapter();
adapter.drawCircle();
adapter.drawRectangle();
}

static class MyDrawAdapter extends DefaultDrawAdapter{
@Override
public void drawCircle() {
// TODO Auto-generated method stub
System.out.println("My DrawAdapter:Draw CirCle");
}

@Override
public void drawRectangle() {
// TODO Auto-generated method stub
super.drawRectangle();
System.out.println("My DrawAdapter:Draw Rectangle");
}
}
}
23种设计模式demo下载

23种设计模式之适配器模式(Adapter模式)相关推荐

  1. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  2. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  3. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  4. 23种设计模式之抽象工厂模式(Abstract Factory Pattern)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习.本篇文章将23种设计模式中的抽象工厂模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识. 如果文章有什么需要改进的地方还请 ...

  5. JAVA开发的23种设计模式之 —  装饰器模式 代理器模式

    装饰器模式 概述 : 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活 维基百科解释 : 通过使用修饰模式,可以在运行时扩充一个类的功能.原理是 :增加一个修饰类包裹 ...

  6. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之适配器模式

    · 适配器模式在王者荣耀中的应用 · 应用一:元歌通过傀儡假扮敌方的任意英雄 应用二:王者荣耀iOS与安卓互通 一.简述 简单来讲,适配器模式就是通过一个适配器将一个类的接口变成客户端所期待的另一种接 ...

  7. 23种设计模式之适配器模式

    适配器模式的定义 定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 通俗的说, 就是有 A.B两个接口, 现在要求把A和B安装在一 ...

  8. GoF的23种设计模式之创建型模式的特点和分类

    创建型模式的主要关注点是"怎样创建对象?",它的主要特点是"将对象的创建与使用分离".这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关 ...

  9. (六)JAVA设计模式23种设计模式之适配器模式实例demo

    适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的 ...

  10. 23种设计模式(6)-适配器模式

    适配器模式 1.概述 2.适配器模式的用途 3.模式中的角色 4.实现方式 5.类适配器和对象适配器的权衡 6.缺省适配模式 1.概述 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原 ...

最新文章

  1. 这一招将 Numpy 加速 700 倍!!!
  2. Apple Pay,呸!
  3. win7右键点击文件夹进入命令窗口方法
  4. 细数开源历史上的十个重大事件
  5. 理解Spring Boot
  6. 学习:MOSS2007 实现单点登陆(转)
  7. [vue]vue路由篇vue-router
  8. Atitit.nosql api 标准化 以及nosql数据库的实现模型分类差异
  9. MyBatis 拦截器使用
  10. 谷歌浏览器Choromium定制
  11. 这里是一个简单的CRM客户关系管理系统的开发教程,你值得拥有哟!
  12. 【通俗易懂的通信】马尔可夫过Ⅲ:马尔可夫链的极限性态与平稳分布
  13. 最好最实用的PHP二次开发教程
  14. 解决荣耀magicbook Linux版 无线网卡驱动安装不上的问题
  15. 走向.NET架构设计—第三章—分层设计,初涉架构(后篇)
  16. R 散点图,添加标签
  17. 论文阅读笔记《Adaptive Image-Based Visual Servoing Using Reinforcement Learning With Fuzzy State Coding》
  18. 微信上线新功能 看到这个提醒一定要接听
  19. 找不到apt和vim命令
  20. 华为OD面试——机试算法

热门文章

  1. matlab绘制数字滤波器的幅频响应曲线
  2. Linux 终端命令的末尾加上一个 符号的作用
  3. ionic的Alert弹出框详解
  4. 如何查看各类期刊的影响因子
  5. [转] 史上最全英文免费编程电子书列表
  6. python--unicode汉字编码表实现汉字输出
  7. 中兴c语言 面试题,中兴手机嵌入式开发面试题汇总(1)
  8. 华为数通笔记-QOS
  9. 持久层框架 -Xxmm.Net
  10. tcpdump 在ubuntu上使用命令学习笔记 /tcp、ip、icmp数据包格式