什么是适配器模式
当你想使用一个类的时候,但是这个类的接口跟你又不一样,不能拿来直接用,这个时候就需要一个适配器来帮你了。
适配器类图
Class: void setPlugin(cnPlugin:CnPluginInterface); void charge();
Interface: CnPluginInterface -> void chargeWith2Pins();
Class: CnPlugin -> void chargeWith2Pins();
Class: PluginAdapter -> enPlugin: EnPluginInterface; void chargeWith2Pins();
Interface: EnPluginInterface -> void chargeWith3Pins();
Class: EnPlugin -> void chargeWith3Pins();
示例代码
public interface CnPluginInterface {
void chargeWith2Pins();
}
public class CnPlugin implements CnPluginInterface{
@Override
public void chargeWith2Pins() {
System.out.println("charge with CnPlugin");
}
}
public class Home {
private CnPluginInterface cnPlugin;
public Home() {
}
public Home(CnPluginInterface cnPlugin) {
this.cnPlugin = cnPlugin;
}
public void setPlugin(CnPluginInterface cnPlugin) {
this.cnPlugin = cnPlugin;
}
public void charge() {
cnPlugin.chargeWith2Pins();
}
}
public class CnTest {
public static void main(String[] args) {
CnPluginInterface cnPlugin = new CnPlugin();
Home home = new Home(cnPlugin);
home.charge();
EnPluginInterface enPlugin = new EnPlugin();
Home home1 = new Home();
PluginAdapter pluginAdapter = new PluginAdapter(enPlugin);
home1.setPlugin(pluginAdapter);
home1.charge();
}
}
1.适配器必须实现原有的旧的接口
2.适配器对象中持有对新接口的引用, 当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。
public interface EnPluginInterface {
void chargeWith3Pins();
}
public class EnPlugin implements EnPluginInterface{
@Override
public void chargeWith3Pins() {
System.out.println("charge with EnPlugin");
}
}
public class PluginAdapter implements CnPluginInterface{
private EnPluginInterface enPlugin;
@Override
public void chargeWith2Pins() {
enPlugin.chargeWith3Pins();
}
public PluginAdapter(EnPluginInterface enPlugin) {
this.enPlugin = enPlugin;
}
}
运行结果:
适配器模式的应用
只要就是在旧的接口、新的接口之间完成适配。
适配器模式的三个特点:
- 适配器对象实现原有接口
- 适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个对象,只是一个单纯的对象)
- 对适配器原有接口方法的调用委托给新接口的实例的特定方法
适配器模式到此结束