Android设计模式——适配器模式

1.适配器模式定义

  适配器就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。说白了适配器模式就是将某个对象适配成我们需要的对象。

2.适配器模式分类

2.1 类适配模式

1.Adaptee角色 需要被转换的对象

// 人民币
public class RMBAdaptee {
    private float mRmb;

    public RMBAdaptee(float mRmb) {
        this.mRmb = mRmb;
    }

    public float getRmb() {
        return mRmb;
    }
}

2.Target角色

public interface USDTarget {
    float getUsd();
}

3.Adapter(适配)角色,将人民币转换成美元

public class Adapter extends RMBAdaptee implements USDTarget{

    public Adapter(float mRmb) {
        super(mRmb);
    }

    @Override
    public float getUsd() {
        return getRmb() / 7.1f;
    }
}

4.使用

 Adapter adapter = new Adapter(200);
 float usd = adapter.getUsd();
 System.out.println(usd);

5.UML图
image.png

2.2 对象适配模式 (常用)

1.Adaptee角色 需要被转换的对象

// 人民币
public class RMBAdaptee {
    private float mRmb;

    public RMBAdaptee(float mRmb) {
        this.mRmb = mRmb;
    }

    public float getRmb() {
        return mRmb;
    }
}

2.Target角色

public interface USDTarget {
    float getUsd();
}

3.Adapter(适配)角色,将人民币转换成美元

public class Adapter implements USDTarget{

   private RMBAdaptee rmbAdaptee;

    public Adapter(RMBAdaptee rmbAdaptee) {
        this.rmbAdaptee = rmbAdaptee;
    }

    @Override
    public float getUsd() {
        return rmbAdaptee.getRmb() / 7.1f;
    }
}

4.使用

 RMBAdaptee adaptee = new RMBAdaptee(200);
 Adapter adapter = new Adapter(adaptee);
 float usd = adapter.getUsd();
 System.out.println(usd);

5.UML图
image.png

3.Android源码中适配器模式

1.RecyclerView的适配器,RecyclerView从后台获取的列表数据 是一个对象数组,而RecyclerView内需要显示的是View,基于两者不匹配,所以采用了适配器模式。将我们的对象数组适配成RecyclerView需要的View

4.总结

优点:
  更好的复用性
  系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。

  更好的扩展性
  在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

缺点:
  过多的使用适配器,会让系统非常零乱,不易整体进行把握。
  比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值