小菜学设计模式——适配器模式

背景

不要再问程序员谈女票的事情了,我都说过很多次了,上次相亲又给话了500元钱,关键是这钱不是花给了对方,而是花在了臭红娘身上了。额,事情是这样的,你找女票,她找男票,但是你也知道,女孩子害羞,男程序员一样害羞,所以找了一个红娘搭一个适配,帮助我们相互了解对方,这里就是一个经典的适配器模式!

1、使用意图

如果能事先预防接口不同的问题,不匹配问题就不会发生;有一个小接口不统一问题发生时,就及时重构,问题不至于扩大;只有碰到无法改变原有设计和代码的情况时,才考虑使用适配器,那么使用适配器的目的就是适配一些客户端不能直接使用的接口,实质是一种亡羊补牢。

2、生活实例

姚明找翻译打比赛,翻译就是一个沟通的适配

3、Java 例子(框架、JDK 、JEE)

适配器模式的出现是因为原有接口不能很好的对接才出现的,JDK中也有很多,比如接口适配,所有实现接口的类都必须要实现接口的所有方法,如果采用适配器模式,用一个抽象类(Adapter),去空实现非必须接口的方法,然后我们就只需要实现抽象类的抽象方法就好。

4、模式类图

  1. 目标抽象角色(Target):定义特定领域的接口,客户端能够使用的角色
  2. 适配源(Adaptee):也称之为被适配者。它是最终的目标,客户本来就是想要使用Adaptee,但是不能直接调用。
  3. 适配器(Adapter):也称之为转换器。客户想要通过目标抽象角色这个接口对象来调用适配源的方法,因为适配源和目标抽象角色根本就不存在关系,所以要用适配器进行转换,但不向客户公布。那么适配器有两种选择:  其一是他可以实现目标抽象角色并且继承适配源,在实现接口中的方法的时候直接调用他继承适配源的方法就可以到达目的。其二是他可以实现目标抽象角色,并且含有适配源对象的引用,那么在实现接口的方法的时候直接通过适配源对象调用他的方法就可以到达目的。
  4. 客户(Client):通过运用适配器对象完成他想要完成的目的,Target t =  new Adapter(); 在Adapter内部调用Adaptee的真正方法。

5、模式优点

适配器模式:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。    系统的数据和行为都正确,但接口不符合对接时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要用于希望复用一些现存的类,但是接口有与复用环境要求不一致的情况。

6、与类似模式比较

适配器的出现是为了弥补接口对接的问题,如果能够在设计之初避免接口对接问题,那么就没必要使用适配器模式,所以能够尽量不使用适配器模式那是最好的选择;但是,我们经常会使用第三方的SDK进行开发,由于他们和我们的的编码习惯稍有差异,导致接口定义也会有些差距,这个时候我们不可能为了适应别人而去调整自己,而是采用中间适配模式进行对接。

时间: 2024-10-08 08:02:28

小菜学设计模式——适配器模式的相关文章

小菜学设计模式——单一职责原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:单一职责 书面理解 单一职责:就一个类而言,应该仅有一个引起它变化的原因 如果一个类承担职责过多,接等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制

小菜学设计模式——合成复用原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:合成复用原则 书面理解 合成复用原则:要尽量使用合成/聚合,尽量不要使用继承. 对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类

小菜学设计模式——接口隔离原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:接口隔离原则 书面理解 接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口. 接口应该是内聚的,应该避免"胖"接口.一个类对另

小菜学设计模式——迪米特原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:迪米特原则(最少知识原则) 书面理解 迪米特原则:如果两个类不必彼此直接通信,那么这两个类就应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法

小菜学设计模式——里氏替换原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:里氏替换原则 书面理解 里氏替换原则:一个软件实体如果使用的是父类的话,那么一定适用与其子类,而且它察觉不出父类对象和子类对象的区别.也就是说,在软件里面,把

小菜学设计模式——高内聚、低耦合

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:高内聚.低耦合 当然,这条原则不是面向接口编程的具体原则,他是所有原则.所有设计模式都必须遵循的一条亘古不变的宗旨. 网上学习与记录 起因:模块独立性指每个模

小菜学设计模式——依赖倒转原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:依赖倒转原则 书面理解 依赖倒转原则: A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象. B.抽象不应该依赖于具体,具体应该依赖于抽象. 简单

小菜学设计模式——开放封闭原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:开放封闭原则 书面理解 开放封闭原则:软件实体(类.模块.函数等等)应该可以扩展,但是不可以修改 对于扩展是开放的,对于修改则是关闭的 无论模块是多么的封闭,

小菜学设计模式——设计模式总结之结构型

1.设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 3)行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代器模式.职责链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式 2.结构型设计模式 1)适配器模式:将一个类的接口