设计模式之适配器模式(结构型)
文章目录
- 模式定义
- 模式角色
- 模式分析
- 模式例子
- 模式分类
- 模式应用
模式定义
适配器模式(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三种通知类型借助适配器模式来实现。
设计模式之适配器模式(结构型)相关推荐
- 设计模式7大结构型模式
2019独角兽企业重金招聘Python工程师标准>>> 结构型模式:结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例.故可以分为类 ...
- 设计模式总结之结构型模式
设计模式总结之结构型模式 结构型模式描述如何组织类和对象以组成更大的结构.结构型类模式采用继承机制来组合接口和实现,结构型对象模式则采用组合聚合来组合对象以实现新功能,可以在运行时刻改变对象组合关系, ...
- iOS设计模式四部曲(二) 结构型模式 内附Demo
本篇是四部曲的第二篇,第一篇请点这里iOS设计模式四部曲(一):创建型模式 内附Demo,关于设计模式强烈推荐图书<Head First设计模式>以及<研磨设计模式>.由于个人 ...
- 设计模式(17):结构型-组合模式(Composite)(2)
设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...
- 设计模式GOF23之-------------------结构型模式(适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式)
一 结构型模式 二 适配器模式 下面我将用代码模拟键盘usb接口和ps/2的转接器 的适配器过程: 首先定义客户需求: package GOF23;public interface Target {v ...
- 初探Java设计模式2:结构型模式(代理模式,适配器模式等)
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)
一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...
- C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...
结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...
- 设计模式七:结构型-适配器模式
结构型模式:适配器模式 文章目录 结构型模式:适配器模式 适配器模式 1.适配器模式:介绍 2.适配器模式:模拟场景 3.适配器模式:场景模拟工程 4.适配器模式:代码实现 4.适配器模式:总结 适配 ...
最新文章
- 以下哪个选项不能减少用户计算机,2012年计算机二级Access第十二套单选练习题及答案...
- 如何在Linux中查看所有正在运行的进程
- 蓝牙核心-L2CAP
- linux系统怎样指定gpu运行,linux服务器如何指定gpu以及用量
- Hbase的应用场景、原理及架构分析(转:https://blog.csdn.net/xiangxizhishi/article/details/75388971)
- java 初始化log4j_java – log4j:WARN请正确初始化log4j系统
- 缺失值和异常值的识别与处理_识别异常值-第一部分
- numpy 转置_Python中Numpy.transpose()
- Docker快速配置指南
- oracle没有正常启动,Oracledbstart无法正常启动处理办法
- java正则表达式 提取 host_使用正则表达式获取链接的Host
- 100项PPT制作技术,做出让观众倾倒的演示文档!
- java连连看怎么加音效,怎么给视频配音,添加音效与BGM都教给你
- 导弹打飞机问题(贪心算法)
- 使用 emeditor 删除空行
- C++ Primer 学习笔记 第十九章 特殊工具与技术
- 用户网络接口UNI和网络节点接口NNI
- 如何提高程序员的生产率 (2)
- 项目管理:PMP和IPMP哪个更值得考?两个证书的区别在于哪里?
- 五角场 IT 养老院的性价比!