A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 825176857 中级黑马   /  2015-7-12 23:58  /  338 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

// 英标接口
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();
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马