适配器模式
介绍
适配器模式:将一个类的接口转换成客户端需要的另一种接口,从而将接口不兼容的两个类可以一起工作,即,适配器根据输入的参数返回给客户端期望类型的实例。如:sd卡和电脑之间要共同工作,需要读卡器,而读卡器就是这层关系中的适配器。
具体而言,在程序设计过程中,希望复用一些现有的类,但是接口却又和现有的类不一致,并且我们无法更改现有类的基础上,可以通过适配器的方式来完成需求。
包含如下几个角色:
- Target(目标抽象类):客户期望的业务接口,可以是具体类,也可以是接口。
- Adapter(适配器类):适配器类可调用Adaptee接口,以对 Adaptee 和 Target 进行适配,使其协调工作。
- Adaptee(适配者类):被适配的角色,定义了可工作、已存在、待适配的接口,有些情况下甚至没有源代码,只有接口。
- Client(客户类):客户类面对目标抽象类进行编程。
适配器为结构性模式,分为两种:
- 类适配器:适配器类与适配者类是继承关系,因为Java不支持多重继承,因此该模式下目标抽象类只能是接口。
- 对象适配器:适配器类与适配者类是关联关系(也可以称为委派关系),即含有适配者类的成员变量。
关联关系:两个类中的属性有包含关系,如A类中某一个属性是B类对象。关联关系还可以细分为聚合和组合。
区别于依赖关系,如A类中某方法的参数是B对象,那么B对象的改变会对A产生影响,这种是依赖关系。
类图
举一个例子:有一个火鸡接口及其实现类,有一个鸭子接口及其实现类,目前得到一个火鸡对象,需要让火鸡学鸭子的动作。那么,定义一个鸭子适配器类,实现鸭子接口,成员变量为火鸡,重写鸭子的相关动作,即可实现火鸡对象执行鸭子的方法。
适配器模式的设计类图:
Java源码中用到适配器模式的类
待补充
HashSet HashMap