两种适配器模式

来源:互联网 发布:网络打印机通讯协议 编辑:程序博客网 时间:2024/05/19 03:18

面向对象的23种设计模式点这里。说到适配器,我想我们接触最多的叫电源适配器。没错,所有的手机充电器都是电源适配器。从交流变直流,从220v到5v。而适配器模式分为两种,一种是类适配器,一种是对象适配器。下面先写类适配器:

public class Adapter {    static class HomePower {        public String homeRequest() {            return "220V交流电";        }    }    // 目标接口,或称为标准接口    interface PhonePower {        public String request();    }    // 具体目标类,只提供普通功能    static class AndroidPower implements PhonePower {        public String request() {            return "5v直流电";        }    }    //充电使用标准接口    static class Android {        public void charge(PhonePower power) {            System.out.println(power.request() + "充电");        }    }    // 适配器类,继承了被适配类,同时实现标准接口    static class PowerAdapter extends HomePower implements PhonePower {        public String request() {            return super.homeRequest();        }    }    // 测试类public class Client {    public static void main(String[] args) {        new Android().charge(new AndroidPower());        //有了电源适配器安卓就可以使用220v充电        new Android().charge(new PowerAdapter());    }}输出:5v直流电充电220V交流电充电

下面是对象适配器模式:

public class Adapter {    static class HomePower {        public String homeRequest() {            return "220V交流电";        }    }    // 只有具体目标类,目标接口是因为java不支持多继承    static class AndroidPower {        public String request() {            return "5v直流电";        }    }    //充电使用标Android接口    static class Android {        public void charge(AndroidPower power) {            System.out.println(power.request() + "充电");        }    }    // 适配器类,这里直接继承普通接口,不用实现目标接口,    static class PowerAdapter extends AndroidPower {        private HomePower homePower;        PowerAdapter(HomePower homePower){            this.homePower = homePower;        }        public String request() {            return this.homePower.homeRequest();        }    }    // 测试类public class Client {    public static void main(String[] args) {        new Android().charge(new AndroidPower());        //有了电源适配器安卓就可以使用220v充电        new Android().charge(new PowerAdapter(new HomePower()));//使用匿名内部类来继承   //        new Android().charge(new AndroidPower(){//            @Override//            public String request() {//                return new HomePower().homeRequest();//            }//        });    }}输出:同上

最后说一下,就像真实中一样,适配器一般解决历史遗留问题。所以适配器模式在软件设计阶段是不能出现的。个人推荐使用对象适配模式,其中也可以像注释的那样使用匿名内部类。

原创粉丝点击