title: 适配器模式
author: rack-leen
avatar: /images/favicon.png
authorDesc: 脱发典范
comments: true
copyright: true
date: 2019-5-19 22:05:03
tags:
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
现在我们有一部没电的手机,我们需要充电。
这里有两个充电器,一个是手机原配充电器,另一个是与手机不兼容的充电器。
我们需要让不兼容的充电器让手机能充电。
/**
* 这是所有手机都要实现的接口
*/
public interface Phone {
/* 手机请求充电 */
public void requestCharger();
/* 充电完成 */
public void ok();
}
/**
* 这里有一个苹果手机
*/
public class IPhone implements Phone {
@Override
public void requestCharger() {
System.out.println("IPhone请求充电");
}
@Override
public void ok() {
System.out.println("IPhone充电完成");
}
}
/**
* 这是都需要实现的接口,这里有所有充电器都需要的功能
*/
public interface BatterCharger {
/* 充电 */
public void recvCharger();
}
public class AndroidBatterCharger implements BatterCharger {
@Override
public void recvCharger() {
System.out.println("Android手机充电器");
}
}
public class IPhoneBatterCharger implements BatterCharger {
@Override
public void recvCharger() {
System.out.println("IPhone手机充电器");
}
}
public abstract class Adapter {
public abstract void charger();
}
public class IPhoneAdapter extends IPhone implements BatterCharger {
@Override
public void recvCharger() {
System.out.println("获取IPhone充电器,开始充电");
}
}
我们需要给苹果手机充电,这里有苹果和安卓两个充电器,有一个苹果手机和一个适配器。
我们先将苹果和安卓充电器对外提供接口与适配器连接,让适配器可以自由选择连接哪个充电器。
然后将适配器与苹果手机连接。这就可以进行充电了。
public class Test{
public static void main(String[] args) {
/* 创建一个iphone手机 */
Phone phone = new IPhone();
/* 请求充电器 */
phone.requestCharger();
/* 创建一个iphone手机充电器 */
IPhoneAdapter iPhoneAdapter = new IPhoneAdapter();
/* 开始充电 */
iPhoneAdapter.recvCharger();
/* 充电完成 */
phone.ok();
}
}