通过增加新的适配器类来解决接口不兼容的问题
一、适配器模式概述:
讲一个借口转换成客户希望的另一个接口,使借口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构模型,也可以作为对象结构型模式。在适配器模式中包含以下三个角色:
- Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类
- Adapter(适配器类):适配器可以调用另一个接口,作为转换器,对Adapter和Target进行适配
- Adaptee(适配者类):被适配的角色
典型的适配器模式代码:
class Adapter extends Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee=adaptee;
}
public void request(){
adaptee.specificRequest();
}
}
二、完整解决方案:
//目标接口
interface ScoreOperation{
public int[] sort(int array[]);
public int search(int array[],int key);
}
//适配者
class QuickSort{
}
class BinarySearch{
}
//适配器
class OperationAdapter implements ScoreOperation{
private QuickSort sortObj;
private BinarySearch searchObj;
public OperationAdapter(){
sortObj=new QuickSort();
searchObj=new BinarySearch();
}
public int[] sort (int array[]){
return sortObj.quickSort(array);
}
public int search(int array[],int key){
return searchObj.binarySearch(array,key);
}
}
可使用XMLUtil使系统具有良好的灵活性和扩展性
三、类适配模式
类适配模式与对象适配迷失最大的区别在于其适配器和适配者之间的关系是继承关系
四、双向适配器
如果在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用适配者中的方法,就是一个双向适配器。
五、缺省适配器模式
当不需要实现一个借口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现。
六、适配器模式总结
- 主要优点:
- 解耦
- 增加类的透明性和复用性
- 灵活性和扩展性都非常好
- 把不同的适配者适配到同一个目标
- 可以适配一个适配者的子类
- 主要缺点
- 不支持多继承的语言,一次只能适配一个适配者类
- 适配者不能为最终类
- 在java中,类适配器模式zhong中的目标抽象类,只能为接口,不能为类
- 场景
- 使用现有类
- 创建一个可以复用的类