【四】设计模式——适配器模式(Adapter Pattern)

定义

适配器模式(Adapter Pattern):

Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.
译:将一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

类图

适配器模式UML
来解释一下这个图片:
适配器模式分为类适配模式(图1)和对象适配模式(图2)。
通过图来看,第一个是继承的方式,第二个是依赖组合的方式。
作用都是将Adaptee源类经过Adapter类,改装成Target能够识别的接口。实例代码稍后添加~

除了这两种外,Android里面还有ListView的Adapter,或者IOS的UITableView里面的datasource,而这种模式也是适配器模式,这种是将无数中输入转化成约束好的接口输出。代码也在后面附上~

使用场景

接口不兼容,类似三头没法插在两头插座上一样,需要一个转换器
统一的输出接口,而输入多种多样,类似上面的ListView 的Adapter
用于关联一些关系不大的类。

实现方式


类适配模式,继承的方式

//Target
public interface TwoPlug {
    public int getTwoPlug();
}
//Adaptee
public class ThreePlug {
    public int getThreePlug() {
        return 3;
    }
}
// Adapter
public class ThreeToTwoAdapter extends ThreePlug implements TwoPlug {

    @Override
    public int getTwoPlug() {
        return changeToTwo();
    }

    private int changeToTwo() {
        int originalPlug = getThreePlug();
        // 只接两根线,不使用接地线,对接!!
        return 2;
    }
}
public static void main(String[] args) {
    int plugin = new ThreeToTwoAdapter().getThreePlug();
}

对象适配模式
Target与Adaptee类不做修改,只改Adapter类

// Adapter
public class ThreeToTwoAdapter implements TwoPlug {
    private ThreePlug plug;
    // 以参数传入
    public ThreeToTwoAdapter(ThreePlug plug) {
        this.plug = plug;
    }

    @Override
    public int getTwoPlug() {
        return changeToTwo();
    }

    private int changeToTwo() {
        int originalPlug = plug.getThreePlug();
        // 只接两根线,不使用接地线,对接!!
        return 2;
    }
}

ListView adapter
我们只需要实现下面4个方法,就可以做到自定义不同样式的item,而针对ListView来说都是一样的接口,非常方便

    @Override
    public int getCount() {
        return 0;//返回总共多少个条目
    }

    @Override
    public Object getItem(int position) {
        return null;//返回每个条目的对象
    }

    @Override
    public long getItemId(int position) {
        return 0;//返回条目的id
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return null;//返回每个条目具体的View样式
    }

原文地址:http://blog.csdn.net/yk3372/article/details/53384968

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值