定义
将一个类的接口转换成客户希望的另一个接口
角色
目标接口(Target):定义客户端使用的与特定领域相关的接口
需要适配的类(Adaptee):定义一个已经存在的接口,这个接口需要适配
适配器(Adapter):对Adaptee的接口与Target接口进行适配
优点
- 客户端可以调用同一接口,因而对客户端来说是透明的, 这样做更简单、更直接、更紧凑
- 复用了现存的类
- 通过引入一个适配器重用现有的Adaptee类,将目标类与Adaptee类解耦
缺点
- 更换适配器的实现过程比较复杂
适用场景
- 想使用一个已经存在的类, 但它的接口不符合你的需求
- 想创建一个可以复用的类,该类可以与其它不相关的类协同工作
- 两个类所做的事情相似,但是具有不同接口时
类图
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public interface Target {
void adapteeMethod();
void adapterMethod();
}
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public class Adaptee {
public void adapteeMethod() {
System.out.println("Adaptee method");
}
}
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void adapteeMethod() {
adaptee.adapteeMethod();
}
@Override
public void adapterMethod() {
System.out.println("Adapter method");
}
}
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public class Client {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.adapteeMethod();
target.adapterMethod();
}
}
本文代码可在github查看:点击此处