android 设计模式篇 之 适配器模式

注:转载请注明出处,请珍惜成果
https://blog.csdn.net/treasureqian/article/details/103583635

1.简介

设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。

 

2.分类

适配器模式属于结构型模式。

分为两类,对象适配器模式和类适配器模式。

最简单的比喻就是 android插口转Type C插口,香港电源适配器

1)对象适配器

在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。

 

2)类适配器模式

这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

 

3.简单的代码示例

                         (220V 转 5V)

1)创建适配器接口

public interface Adapter {
    int convertTo5V();
}

2)创建需要转换的对象

public class Electric {
    public int output220V() {
        return 220;
    }
}

3)创建具体的适配器

@1 对象适配器模式

public class PhoneAdapter implements Adapter {
    private Electric electric;

    public PhoneAdapter(Electric electric) {
        this.electric = electric;
    }

    @Override
    public int convertTo5V() {
        Log.d(TAG, "适配器开始工作: ");
        Log.d(TAG, "输入电压: " + electric.output220V());
        Log.d(TAG, "输出电压:" + 5);
        return 5;
    }
}

@2 类适配器模式

public class PhoneClassAdapter extends Electric implements Adapter{
    @Override
    public int convertTo5V() {
        Log.d(TAG, "适配器开始工作: ");
        Log.d(TAG, "输入电压: " + output220V());
        Log.d(TAG, "输出电压:" + 5);
        return 5;
    }
}

二者的区别:一个是传入对象   一个是以子类方式去继承

4)去调用

前者为对象适配器调用    后者为类适配器模式

public void init() {
        Electric electric = new Electric();
        PhoneAdapter phoneAdapter = new PhoneAdapter(electric);
        phoneAdapter.convertTo5V();

        System.out.println(MainActivity.TAG + "--------------------------------------------");

        PhoneClassAdapter phoneClassAdapter = new PhoneClassAdapter();
        phoneClassAdapter.convertTo5V();
    }

结果

5)比较

  • 类适配器采用了继承的方式来实现;而对象适配器是通过传递对象来实现,这是一种组合的方式
  •  
  • 适配器通过继承都获得了父类的方法,客户端使用时都会把这些方法暴露出去,增加了一定的使用成本;对象适配器则不会。
  •  
  • 类适配器只能适配他的父类,这个父类的其他子类都不能适配到;而对象适配器可以适配不同的对象,只要这个对象的类型是同样的。
  •  
  • 类适配器不需要额外的引用;对象适配器需要额外的引用来保存对象。

4.使用场景以及优缺点

  • 当想使用一个已经存在的类,但它的接口不符合需求时。
  • 当想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。
  • 提高了类的复用性,提高了类的灵活性(不同适配器不同功能),符合开闭原则,不修改原有的类
  • 过多的使用适配器,会让系统非常零乱,不易整体进行把握。明明调用A接口,却被适配成B接口。

 

注:RecyclerView的复杂布局,就是通过adapter提供不同的layout引用,达到多布局的效果。不同的id不同的布局

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值