文章目录

  • 模式定义
  • 模式角色
  • 模式分析
  • 模式例子
  • 模式分类
  • 模式应用

模式定义

适配器模式(Adapter Pattern):将一个接口转换成客户希望的接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

模式角色

适配器模式包括如下角色

  • Traget(目标抽象类)
  • Adapter(适配器类)
  • Adaptee(适配者类)
  • Client(客户类)

模式分析

适配器模式将目标类和适配者类解耦,引入一个适配器类来重用适配者类,具体的实现是在适配者类的,通过适配器模式,客户端类就不知道适配者类的具体实现了,

典型的类适配器代码:

public class Adapter extends Adaptee implements Target
{public void request(){specificRequest();}
}

典型的对象适配器代码:

public class Adapter extends Adaptee implements Target
{public void request(){specificRequest();}
}

模式例子

某系统需要提供一个加密模块,将用户信息(如密码等机密信息)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法

本例子来自《设计模式》一书

目标类:

public abstract class DataOperation
{private String password;public void setPassword(String password){this.password=password;}public String getPassword(){return this.password;}public abstract String doEncrypt(int key,String ps);
}

适配者类:

public final class Caesar
{public String doEncrypt(int key,String ps){   String es="";for(int i=0;i<ps.length();i++){char c=ps.charAt(i);if(c>='a'&&c<='z'){c+=key%26;if(c>'z') c-=26;if(c<'a') c+=26;}if(c>='A'&&c<='Z'){c+=key%26;if(c>'Z') c-=26;if(c<'A') c+=26;}es+=c;}return es;}
}

适配器类:

public class CipherAdapter extends DataOperation
{private Caesar cipher;public CipherAdapter(){cipher=new Caesar();}public String doEncrypt(int key,String ps){return cipher.doEncrypt(key,ps);}
}
public class NewCipherAdapter extends DataOperation
{private NewCipher cipher;public NewCipherAdapter(){cipher=new NewCipher();}public String doEncrypt(int key,String ps){return cipher.doEncrypt(key,ps);}
}

模式分类

适配器模式可以分为默认适配器和双向适配器

默认适配器
在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。

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

模式应用

  • JDBC驱动软件都是一个介于jdbc接口和数据库引擎接口之间的适配器软件。JDBC驱动软件使java程序可以适配各种数据库引擎
  • Spring AOP框架中,对BeforeAdvice、AfterAdvice、ThrowsAdvice三种通知类型借助适配器模式来实现。

设计模式之适配器模式(结构型)相关推荐

  1. 设计模式7大结构型模式

    2019独角兽企业重金招聘Python工程师标准>>> 结构型模式:结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例.故可以分为类 ...

  2. 设计模式总结之结构型模式

    设计模式总结之结构型模式 结构型模式描述如何组织类和对象以组成更大的结构.结构型类模式采用继承机制来组合接口和实现,结构型对象模式则采用组合聚合来组合对象以实现新功能,可以在运行时刻改变对象组合关系, ...

  3. iOS设计模式四部曲(二) 结构型模式 内附Demo

    本篇是四部曲的第二篇,第一篇请点这里iOS设计模式四部曲(一):创建型模式 内附Demo,关于设计模式强烈推荐图书<Head First设计模式>以及<研磨设计模式>.由于个人 ...

  4. 设计模式(17):结构型-组合模式(Composite)(2)

    设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...

  5. 设计模式GOF23之-------------------结构型模式(适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式)

    一 结构型模式 二 适配器模式 下面我将用代码模拟键盘usb接口和ps/2的转接器 的适配器过程: 首先定义客户需求: package GOF23;public interface Target {v ...

  6. 初探Java设计模式2:结构型模式(代理模式,适配器模式等)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  7. 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)

    一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...

  8. C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...

    结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...

  9. 设计模式七:结构型-适配器模式

    结构型模式:适配器模式 文章目录 结构型模式:适配器模式 适配器模式 1.适配器模式:介绍 2.适配器模式:模拟场景 3.适配器模式:场景模拟工程 4.适配器模式:代码实现 4.适配器模式:总结 适配 ...

最新文章

  1. 以下哪个选项不能减少用户计算机,2012年计算机二级Access第十二套单选练习题及答案...
  2. 如何在Linux中查看所有正在运行的进程
  3. 蓝牙核心-L2CAP
  4. linux系统怎样指定gpu运行,linux服务器如何指定gpu以及用量
  5. Hbase的应用场景、原理及架构分析(转:https://blog.csdn.net/xiangxizhishi/article/details/75388971)
  6. java 初始化log4j_java – log4j:WARN请正确初始化log4j系统
  7. 缺失值和异常值的识别与处理_识别异常值-第一部分
  8. numpy 转置_Python中Numpy.transpose()
  9. Docker快速配置指南
  10. oracle没有正常启动,Oracledbstart无法正常启动处理办法
  11. java正则表达式 提取 host_使用正则表达式获取链接的Host
  12. 100项PPT制作技术,做出让观众倾倒的演示文档!
  13. java连连看怎么加音效,怎么给视频配音,添加音效与BGM都教给你
  14. 导弹打飞机问题(贪心算法)
  15. 使用 emeditor 删除空行
  16. C++ Primer 学习笔记 第十九章 特殊工具与技术
  17. 用户网络接口UNI和网络节点接口NNI
  18. 如何提高程序员的生产率 (2)
  19. 项目管理:PMP和IPMP哪个更值得考?两个证书的区别在于哪里?
  20. 五角场 IT 养老院的性价比!

热门文章

  1. 汽车 Automotive > SOME/IP VS DDS调研和未来方向
  2. SAS笔记(1) PDV与数据读入
  3. php手机短信接口发送验证码,PHP手机短信接口发送验证码
  4. aspnet是前端还是后端_WEB前端后端简单区别,通俗理解
  5. 第10关:田忌赛马 (1)
  6. iOS邓白码和开发者账号申请
  7. 【避坑】初次接项目的血与泪,扎坑了老铁
  8. Kruskal算法(java)
  9. 百度智能云手机使用体验
  10. 【测试】Python面试题