适配器的定义

适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。

两种模式:

  • 类适配器模式:使用继承的适配器 接口
  • 对象适配器模式:使用委托的适配器 抽象类

涉及角色:

  • 源角色(Adaptee):需要适配的类
  • 目标角色(Target):想要得到的接口
  • 适配器(Adapter):转换装置

类适配器模式例子

源角色

public class Banner {
private String string; public Banner(String string) {
this.string = string;
} public void showWithParen() {
System.out.println("(" + string + ")");
} public void showWithAster() {
System.out.println("*" + string + "*");
}
}

目标角色

public interface Print {
void printWeak(); void printStrong();
}

适配器

public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
} @Override
public void printWeak() {
showWithParen();
} @Override
public void printStrong() {
showWithAster();
}
}

测试类

public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}

打印输出

(Hello)
*Hello*

对象适配器模式

目标角色

public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}

适配器

public class PrintBanner extends Print{
private Banner banner; public PrintBanner(String string) {
banner = new Banner(string);
} @Override
public void printWeak() {
banner.showWithAster();
} @Override
public void printStrong() {
banner.showWithParen();
}
}

适配器的优点

系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

适配器的缺点

过多的使用适配器,会让系统非常零乱,不易整体进行把握。

使用场景

  • 旧版本适配新版本,旧版本经过测试已经稳定运行很久。在更新版本时,想要抛弃旧版本,又要兼容旧版本,就可以使用适配器模式来适配旧版本对象
  • 功能不同的类使用适配器进行转换,使得类可以使用。
  • 让现有的类适配新的接口

参考链接:

[1]http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html

[2]结城浩.图解设计模式[M].北京:人民邮电出版社,2017.P14-P22.

java设计模式笔记(1)-适配器模式的更多相关文章

  1. Java 设计模式笔记

    0. 说明 转载 & 参考大部分内容 JAVA设计模式总结之23种设计模式 1. 什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设 ...

  2. 重学 Java 设计模式:实战适配器模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 擦屁屁纸80%的面积都是保护手的! 工作到3年左右很大一部分程序员都想提升自己的技术 ...

  3. Java设计模式系列之适配器模式

    适配器模式的定义 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.(就类似于我们充电器的转接头将220V的电压转换成我们的手机端 ...

  4. Java设计模式7:适配器模式

    适配器模式 适配器模式说的是,可以把一个类的接口变换成客户端所期待的另一种接口,使得原本因接口不匹配而无法在一起工作的两个类可以一起工作. 适配器模式的用途 适配器模式的用途,在网上找了一幅图,挺形象 ...

  5. java 设计模式-缺省适配器模式

    本文转载地址:http://www.cnblogs.com/iyangyuan/archive/2013/03/11/2954808.html 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个 ...

  6. java设计模式自我总结---适配器模式

    上一篇博客说完了 java 23 中设计模式中的五种 创建性模式,由于篇幅过长,新开一贴今天开始学习结构型模式, 结构型模式包括以下七种:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式. ...

  7. JAVA设计模式初探之适配器模式

    http://blog.csdn.net/jason0539/article/details/22468457 1. 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接 ...

  8. Java设计模式学习记录-适配器模式

    前言 之前已经将五个创建型设计模式介绍完了,从这一篇开始介绍结构型设计模式,适配器模式就是结构型模式的一种,适配器要实现的效果是把“源”过渡到“目标”. 适配器模式 在开发过程中,使用一个已经存在的类 ...

  9. JAVA设计模式初探之适配器模式(转)

    1. 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 2. 解决的问题 即Adapter模式使得原本由于接口不兼容而不 ...

随机推荐

  1. 介绍Python程序员常用的IDE和其它开发工具

    概述 “工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了. IDE 的全称是Integration Development Environment(集成开发环境), ...

  2. Chapter 1 First Sight——24

    He looked away quickly, more quickly than I could, though in a flush of embarrassment I dropped my e ...

  3. 滑雪(ski)

    滑雪(ski) 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  4. 深入浅出Ajax(五)

    function initPage() { alert("3+3");//3+3 alert(eval("3+3")); //6 //eval()函数可以解析. ...

  5. foreach的2个细节!

    人生不应该在同第一个地方摔第三次.... 1. foreach的时候一定要对要遍历的元素进行null判定. 2. foreach中不要对遍历的元素进行增删改操作(问题严重) 还有一个细节: 使用了的流 ...

  6. thinkphp 5.0 模块设计

    模块设计 5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改). 目录结构 标准的应用和模块目录结构如下: ├─ap ...

  7. oracle 主键自动增长

    oracle 主键自动增长 2009-12-11 16:07:00|  分类: 数据库资料|字号 订阅     这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create tabl ...

  8. html5 canvas 实现简单的画图

    今天早上看了一下 canvas 前端画图,数据可视化, 百度的 echart.js  , d3等 js 库都已经提供了强大的绘制各种图形的 API. 下面记录一下 有关canvas 绘图的基本知识: ...

  9. fuel 6.1自动推送3控高可用centos 6.5 juno环境排错(二)

    https://docs.mirantis.com/openstack/fuel/fuel-6.1/ 由于在测试高可用时,我是用esxi虚拟机测试,测试过程中遇到了网络问题:虚拟机间网络不通,故从网络 ...

  10. Bootstrap-dialog的使用(续Bootstrap Table)

    Bootstrap-dialog实现表格内容的增,删,改. 插件引入:必须先引入jquery和bootstrap和artTemplate. <link rel="stylesheet& ...