黑马程序员技术交流社区

标题: 适配器模式 [打印本页]

作者: 825176857    时间: 2015-7-12 23:58
标题: 适配器模式
// 英标接口
public interface EnPluginInterface {
    void chargeWith3 Pins();
}

// 实现英标接口的充电方法
public class EnPlugin implements EnPluginInterface {
    public void chargeWith3 Pins() {
        System.out.println("charge with EnPlugin")
    }
}

// 在室内充电
public class Home {
    private EnPluginInterface enPlugin;

    public Home() { }

    public Home(EnPluginInterface enPlugin) {
        this.enPlugin = enPlugin;
    }

    public void setPlugin(EnPluginInterface enPlugin) {
        this.enPlugin = enPlugin;
    }

    // 充电
    public void charge() {
        enPlugin.chargeWith3 Pins();
    }
}

// 英标测试类
public class Test {
    public static void main(String[] args) {
        EnPluginInterface enPlugin = new EnPlugin();
        Home home = new Home(enPlugin);

        // 会输出 “charge with EnPlugin”
        home.charge();
    }
}


// 现在你回内陆了,只能用国标充电

// 国标接口
public interface CnPluginInterface {
    void chargeWith2 Pins();
}

// 实现国标接口的充电方法
public class CnPlugin implements CnPluginInterface {
    public void chargeWith2 Pins() {
        System.out.println("charge with CnPlugin");
    }
}

// 适配器
public class PluginAdapter implements EnPluginInterface {
    private CnPluginInterface cnPlugin;

    public PluginAdapter(CnPluginInterface cnPlugin) {
        this.cnPlugin = cnPlugin;
    }

    // 这是重点,适配器实现了英标的接口,然后重载英标的充电方法为国标的方法
    @Override
    public void chargeWith3 Pins() {
        cnPlugin.chargeWith2 Pins();
    }
}

// 适配器测试类
public class AdapterTest {
    public static void main(String[] args) {
        CnPluginInterface cnPlugin = new CnPlugin();
        Home home = new Home();
        PluginAdapter pluginAdapter = new PluginAdapter(cnPlugin);
        home.setPlugin(pluginAdapter);

        // 会输出 “charge with CnPlugin”
        home.charge();
    }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2