适配器模式(Adapter)


3.4 适配器模式(Adapter)

用途:将一个类的接口转换成客户希望的另一个类的接口。

例子:电脑网线USB转接器

角色:

电脑(客户端)、网线、转接器、目标接口NetToUsb

  • 目标接口或抽象类(目标抽象类或目标抽象接口):这里例子中就是目标接口USB
  • 适配者类(需要适配的类 Adaptee):它定义了一个已经存在的接口,这个接口需要被适配。在这个例子中网线类就是那个已经存在的接口,但是网线不可以直接插到电脑的USB上。
  • 适配器类(Adapter):包装网线,让网线支持USB接口,把网线插到USB上并处理请求。
    • 适配器类需要同时和两个类打交道,它要把网线和电脑的USB接口连接在一起。有两种方式,
      • 一种是继承要被适配的类(网线类)同时实现目标接口。
      • 另一种是使用组合模式,不去继承适配者类,而是使用聚合的方式,让网线类作为适配器类的一个成员变量,然后再去实现目标抽象接口。

分类:

  • 类适配器:继承模式,继承需要被适配的类,实现目标抽象接口。
  • 对象适配器:组合模式,把需要适配的类作为成员属性变量,同时实现目标抽象接口。

核心理解

适配器模式做的事情是这样的:

有两个不相干的类,但是它们想组合到一起使用,那么就通过一个适配器把二者适配在一起使用。

比如说:电脑有一个USB接口,而网线的接头不是USB的,可是电脑想上网,那么就需要一个接口转接的适配器来完成这个工作,这时候会出现三个类。

  1. 网线类:这个类提供了具体要实现的业务方法,也就是它可以完成上网这件事,比如说有一个方法是net()
  2. USB接口类:这个接口是用户想要的接口,用户希望通过USB接口完成上网这件事,比如说有一个方法是execute()
  3. 转接器类:这个类来完成二者的适配:首先实现USB接口,然后或者通过继承网线类或者通过组合网线类,选择二者的任意一个方式,重写USB接口里的方法execute(),在这个方法里去调用网线类的真实业务方法net()来完成上网这件事
  4. 客户端在调用时,只需要把实例化的网线类通过set注入交给适配器,然后通过调用适配器类的execute()方法就可以完成上网这件事情!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM