美文网首页Android开发经验谈Java设计模式
【设计模式笔记】(十八)- 适配器模式

【设计模式笔记】(十八)- 适配器模式

作者: MrTrying | 来源:发表于2018-07-01 10:47 被阅读33次

    适配器模式(Adapter Pattern),此模式的作用就是兼容原本接口不匹配的两个类,起到桥梁的作用。

    其实在Android中平常接触的就很多,ListViewGridViewRecyclerView都用到的Adapter就用到了适配器模式,无论给Adapter什么样的数据,最后到RecyclerView显示的都是View

    类适配器模式

    类的适配器模式,采用继承实现的

    适配器模式.png
    • Target:目标接口,也就是期望得到的接口
    • Adaptee:需要适配的接口
    • Adapter:适配器,负责把Adaptee转换成Target的类

    不说远了,就说手机充电头,其实就是一个电源适配器,生活用电的电压是220v,而手机充电的电压是5v,所以这时候就需要使用到电源适配器将220v的电压转换为5v(如果你是直接插在插板的USB接口上的话,当我没说)。

    对应上面的UML图, 生活电压就是Adaptee,手机充电电压就是Target,不用多说,电源适配器自然就是Adapter了。

    Target给出

    //Target接口
    public interface Volt5 {
        public int getVolt5();
    }
    
    //Adaptee类
    public class Volt220 {
        public int getVlot220(){
            return 220;
        }
    }
    
    //Adapter类
    public class VoltAdapter extends Volt220 implements Volt5 {
        @Override
        public int getVolt5() {
            return 5;
        }
    }
    
    public class Client{
        public static void main(String[] args){
            VoltAdapter adapter = new VoltAdapter();
            System.out.println("输出电压:" + adapter.getVolt5());
        }
    }
    

    对象适配器模式

    与类适配器模式不同的是,对象适配器模式不适用继承关系链接Adaptee类,而是使用代理关系链接到Adaptee

    适配器模式.png

    这种实现方式直接将要被适配的对象传递到Adapter中,使用组合的形式实现接口兼容的效果。比类适配器的实现方式更灵活,还有就是Adaptee对象不会暴露出来,因为没有继承被适配对象。

    //Target接口
    public interface Volt5 {
        public int getVolt5();
    }
    
    //Adaptee类
    public class Volt220 {
        public int getVlot220(){
            return 220;
        }
    }
    
    //Adapter类
    public class VoltAdapter implements Volt5 {
    
        Volt220 volt220;
    
        public VoltAdapter(Volt220 volt220){
            this.volt220 = volt220;
        }
    
        public int getVolt220(){
            return volt220.getVlot220();
        }
    
        @Override
        public int getVolt5() {
            return 5;
        }
    }
    
    public class Client{
        public static void main(String[] args){
            VoltAdapter adapter = new VoltAdapter(new Volt220());
            System.out.println("输出电压:" + adapter.getVolt5());
        }
    }
    

    优点

    • 复用性好,当现有的类不符合需求时,通过适配器就可以使这些功能得到更好地复用。
    • 扩展性好,可以更好地扩展系统的功能

    缺点

    过多的使用,会让代码更加凌乱。

    「推荐」设计模式系列

    设计模式(零)- 面向对象的六大原则
    设计模式(一)- 单例模式
    设计模式(二)- Builder模式
    设计模式(三)- 原型模式
    设计模式(四)- 工厂模式
    设计模式(五)- 策略模式
    设计模式(六)- 状态模式
    设计模式(七)- 责任链模式
    设计模式(八)- 解释器模式
    设计模式(九)- 命令模式
    设计模式(十)- 观察者模式
    设计模式(十一)- 备忘录模式
    设计模式(十二)- 迭代器模式
    设计模式(十三)- 模板方法模式
    设计模式(十四)- 访问者模式
    设计模式(十五)- 中介者模式
    设计模式(十六)- 代理模式
    设计模式(十七)- 组合模式
    【设计模式笔记】(十八)- 适配器模式
    【设计模式笔记】(十九)- 装饰者模式

    相关文章

      网友评论

        本文标题:【设计模式笔记】(十八)- 适配器模式

        本文链接:https://www.haomeiwen.com/subject/ktecuftx.html