适配器模式-充电器为例

1 适配器模式定义

       适配器将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作,也就是说适配器的功能是把一个接口转换成另一个接口。

2 适配器组成

      适配器模式由三部分组成:需要适配的类、标准接口、适配器。

     需要适配的类(Adaptee):已经存在的类,我们想用这个类中的方法,但是它不符合我们既有的标准接口

     标准接口(Target):客户所期待的接口,标准接口可以是抽象类或者接口。

     适配器(Adapter):通过包装一个需要适配的类,把需要适配的类转换成目标接口。

3 代码示例

   我们以手机充电器为例说明,家庭用电是220v电压、经过充电器的降压可以降到5v,也就是手机需要的电压。

   首先是手机类:

   

package adapter;

/**
 * Created by liuliu on 2017/6/10.
 */

public class MobilePhone {
    public void charge(V5Source v5Source) {
        int powerValue = v5Source.providePowerNormalValue();
        System.out.println("电压值:" + powerValue);

    }
}

手机需要5v的电压充电(V5Source),但家庭用电是220v,要想办法将220v转换成5v。下面是220v电压类:

package adapter;

/**
 * Created by liuliu on 2017/6/10.
 */

public class V220Source {
    public int providePowerValue() {
        return 220;
    }
}

V220Source是adaptee,已经存在的类,要适配成5v。下面是5v接口:

package adapter;

/**
 * Created by liuliu on 2017/6/10.
 */

public interface V5Source {
    public int providePowerNormalValue();
}

V5Source即是标准接口Target。下面我们写适配器adapter:

package adapter;

/**
 * Created by liuliu on 2017/6/10.
 */

public class Adapter implements V5Source {
    private V220Source mAdaptee;
    //组合
    public Adapter(V220Source adaptee) {
        mAdaptee = adaptee;
    }

    @Override
    public int providePowerNormalValue() {
        int value220 = mAdaptee.providePowerValue();
        //经过其他操作,将value220转换成5
        return 5;
    }
}

测试类:

package adapter;

/**
 * Created by liuliu on 2017/6/10.
 */

public class Test {
    public static void main(String[] args) {
        MobilePhone mobilePhone = new MobilePhone();
        Adapter adapter = new Adapter(new V220Source());
        mobilePhone.charge(adapter);
    }
}


上面构造adapter使用的组合方式,也可以使用继承方式。

package adapter;

/**
 * Created by liuliu on 2017/6/10.
 */

public class Adapter extends V220Source implements V5Source {
    @Override
    public int providePowerNormalValue() {
        int value220 = providePowerValue();
        //经过其他操作,将value220转换成5
        return 5;
    }
}

      由上可知,我们使用一个适配器完成了把220V转化了5V然后提供给手机使用,原有的手机类、220V电压类都不需要变化,且手机(客户端)和220V(被适配者)完全解耦。

      之前写的适配器博客:http://blog.csdn.net/beixiaozhang/article/details/51282297

      希望大家批评指正,Android开发交流群:576500546

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值