Skip to content

Latest commit

 

History

History
 
 

AdapterPattern

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

适配器模式

定义

将一个类的接口转换成客户端希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
在一个新的项目中,一些所需要的类在旧的项目中就已经存在,但是由于接口的不同导致已有的类无法被复用,而由于项目时间比较紧又无法改造已有的类,这个时候就应该想办法来“适配”已有的类。
系统或模块的数据和处理流程都是正确的,但是接口与新系统不符时,我们就应该考虑使用适配器模式以达到可控范围之外的对象和某个接口相匹配。当需要复用一些现存的类但是其接口与复用接口环境不一致时,适配器模式拥有很高的价值。  

小结  

需要调用我们所开发的代码的对象就是我们经常提到的所谓客户端。在有些情况下,我们往往会发现现有的类已经提供了客户端所需要的某些功能,因此适配器模式的目的就在于:如果客户端需要使用某个类的功能,但是这个类是通过其他接口提供的,那么使用适配器模式就可以为客户端提供一个期望中的接口。
适配器模式适用于以下情况:  

  • 当想要使用一个已经存在的类,但是该类的接口不符合现有需求时。
  • 当需要创建一个可以被复用类,该类能够与其他无关的类甚至不可预见的类协同工作的时候。
  • 当需要使用一些已经存在的子类,但是不可能对所有的都进行子类化以匹配他们的接口时,对象适配器可以对其父接口进行适配。

通过使用适配器模式,我们可以复用现有的类以满足一个客户端的要求。如果一个客户端在其接口中指定了自身的要求,那么我们就需要创建一个新的类,这个新类通常是希望被复用的类的子类而并非实现了客户端接口的类。这就是创建一个类的适配器,这样就将客户端发出的调用翻译成了对希望被复用的类的调用。
当客户端没有规范其所需要的接口时,适配器模式仍然可以被使用,在这时就需要创建一个客户端的子类,这个子类使用一个希望被复用的类的实例。这实际上就是创建了一个对象适配器,从而将一个客户端发出的调用转发给希望被复用的类的一个实例。但是这种方案可能会有某种风险,比如在我们无法涵盖客户端所需要调用的所有方法时。

想使用一个已经存在的适配器模式,而它的接口却不符合你的需求时,可以创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。当想要使用一些已经存在的子类,但是不可能对每一个都进行子类化一一匹配它们的接口,对象适配器可以适配他们的父类接口。
适配器模式分为类适配器和对象适配器,两者的分别如下:

  • 对象适配器:不是通过继承方式,而是通过对象组合的方式来讲进行处理。
  • 类适配器:通过继承的方式来实现,将旧系统的方法进行封装。对象适配器在进行适配器之间转换过程中,无疑使用类适配器也能完成,但是依赖性会变大,并且根据适配要求的灵活性,可能通过继承系统会膨胀到难以控制。