1.是什么
定义
适配器模式把一个类的接口换成客户端所期待的另一种接口,从而使原本不匹配两个类能够在一起工作。类似于转换插座、变压器的作用。类适配器和对象适配器
引用自http://www.importnew.com/20986.html##s1
类适配器模式使用的是继承的方式,而对象适配器模式则使用的是组合的方法。从设计模式的角度来说,对象适配器模式遵循 OO 设计原则的“多用组合,少用继承”,这是一个优点,但是类适配器模式有一个好处是它不需要重新实现整个被适配者的行为,毕竟类适配器模式使用的是继承的方式,当然这么做的坏处就是失去了使用组合的弹性。
所以在实际过程中需要根据使用情况而定,如果 Adaptee 类的行为很复杂,但是 Adapter 适配器类并不需要这些大部分的无关行为,那么使用对象适配器模式是合适的,但是如果需要重新实现大部分 Adaptee 的行为,那么就要考虑是否使用类适配器模式了。
2.有什么用
可以不修改原来的代码而适配原来的系统。
3.怎么用
- 类图
-
类适配器
对象适配器
区别在于类适配器使用继承,而对象适配器使用组合。
- 示例代码
示例演示把220V电源转为5v电源 - 原有代码(220V)
/**
*
* 既有的接口
*
*/
public interface V220Battery {
// 提供220v能源
public void provide220VEnergy();
}
public class BYD220VBattery implements V220Battery {
@Override
public void provide220VEnergy() {
System.out.println("byd 220v 电源");
}
}
- 新系统的目标接口
public interface V5Battery {
// 提供5v能源
public void provide5VEnergy();
}
- Adapter
/**
* 对象适配器
*
*/
public class Battery220To5Adapter implements V5Battery {
private V220Battery v220Battery;
public Battery220To5Adapter(V220Battery v220Battery) {
this.v220Battery = v220Battery;
}
@Override
public void provide5VEnergy() {
System.out.println("转换器转换电源220v-5v");
v220Battery.provide220VEnergy();
System.out.println("转换结束");
}
}
/**
* 类适配器
*
*/
public class Battery220To5AdapterClassLevel extends BYD220VBattery implements V5Battery {
@Override
public void provide5VEnergy() {
System.out.println("转换器转换电源220v-5v");
provide220VEnergy();
System.out.println("转换结束");
}
}
- Client
public class Client {
public static void main(String[] args) {
V220Battery v220Battery = new BYD220VBattery();
Battery220To5Adapter adapter = new Battery220To5Adapter(v220Battery);
adapter.provide5VEnergy();
Battery220To5AdapterClassLevel adapter2 = new Battery220To5AdapterClassLevel();
adapter2.provide5VEnergy();
}
}