适配器模式是将一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。适配类可以根据所传递的参数返回一个合适的实例给客户端。
对象适配器模式
/*Target角色*/
public interface FiveVolt{
public int getVolt5();
}
/*Adapter角色,需要被转换的对象*/
public class Volt220{
public int getVolt220(){
return 220;
}
}
//对象适配器模式
public class VoltAdapter implements FiveVolt{
Volt220 mVolt220;
public VoltAdapter(Volt220 adaptee){
mVolt220 = adaptee;
}
public int getVolt220(){
return mVolt220.getVolt220();
}
@Override
public int getVolt5(){
return 5;
}
}
public class Test{
public static void main(String []args){
VoltAdapter adapter = new VoltAdapter(new Volt2209());
System.out.println("输出电压:" + adapter.getVolt5());
}
}
这种实现方式直接将要被适配的对象传递到Adapter中,使用组合的形式实现接口兼容的效果。这比类适配器更为灵活,而且被适配对象中的方法不会暴露出来,而类适配器由于继承了被适配对象,因此,被适配对象类的函数在Adapter类中也都含有,这使得Adapter类出现一些奇怪的接口,用户使用成本较高,因此,对象适配器模式更为灵活、适用。
使用场景
- 系统需要使用实现现有的类,而此类的接口不符合系统的需要,即接口不兼容。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
- 需要一个统一的输出接口,而输入端的类型不可预知。