适配器模式
来源:互联网 发布:relex软件 破解版 编辑:程序博客网 时间:2024/06/05 16:51
概念
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
分类
- 类适配器
通过多重继承来适配被适配者 - 对象适配器
通过组合来适配被适配者
适用场景
- 当需要适用一个现有的类而其接口并不符合你的需要时,就是用适配器
- 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
结构
对象适配器
类适配器
- 目标(Target):定义Client使用的与特定领域相关的接口。
- 客户(Client):与符合Target接口的对象协同
- 被适配者(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要适配。
- 适配器(Adapte) :适配器模式的核心。它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配
优缺点
优点
- 该模式通过创建适配器进行接口转换,让不兼容的接口变成兼容。让客户从实现的接口解耦。
- 将客户和接口绑定起来,而不是和实现绑定起来。
- 对于类适配器
(1)不需要重新实现整个被适配者。必要的时候,可以覆盖被适配者的行为,因为类适配器利用的是继承方式
(2)仅仅需要一个类适配器,而不需要一个适配器和一个被适配者
对于对象适配器
(1)不仅可以适配某个类,也可以适配该类的任何子类
(2)采用的是组合方式,更有弹性
(3)加进适配器代码中的任何行为,都可以和被适配者类以及其所有子类搭配工作
缺点
- 对于类适配器,用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作
- 对于对象适配器,使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配
与装饰者模式的区别
适配器将一个对象包装起来以改变其接口,装饰者将一个对象包装起来以增加新的行为和责任
适配器的目的是将已有对象的接口转换为用户期望的接口,允许客户使用新的库和子集合,无需改变“任何”代码,专注于“转换工作”。
装饰者也需要将对象包装起来,但它的工作全都是和“责任”相关的,一旦涉及到装饰者,就表示有一些新的行为或责任要加入到你的设计中,即装饰者的责任是扩展包装的对象的行为或责任。而且对于装饰者,可能还会有更多的装饰者将它再次包装起来,当一个方法调用委托给它时,它根本不知道有多个其他装饰者已经处理过这个调用。
阅读全文
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- JdbcDaoSupport配合@Repository无法注入DataSource
- LaTeX中文支持(Debian/Ubuntu,pdfLaTeX)
- [RK3288][Android6.0] 调试笔记 --- Activity多次调用finish()引起的Warning
- gulp为项目文件添加版本号
- LibUsbDotNet的简单理解:Read Write(Poll)
- 适配器模式
- ES6解构赋值详解
- hadoop之zookeeper
- MTK-JTAG接口
- 2017吉林省教师招聘考试:教育法律救济常考知识点汇总
- darkflow测试和训练yolo
- npm 与 package.json 快速入门
- Request请求
- the field DBMS must be defined