Java设计模式之适配器模式

2017-09-14  本文已影响14人  PeterHe888

什么是适配器模式

当你想使用一个类的时候,但是这个类的接口跟你又不一样,不能拿来直接用,这个时候就需要一个适配器来帮你了。

适配器类图

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;
    }

}

运行结果:

适配器模式.png

适配器模式的应用

只要就是在旧的接口、新的接口之间完成适配。
适配器模式的三个特点:

适配器模式到此结束

上一篇 下一篇

猜你喜欢

热点阅读