适配器模式
适配器模定义
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
在适配器模式中,存在两种不同的模式结构:类的适配器模式和对象的适配器模式
对象适配器模式
graph TD
A[MiPhone]
B[IPhone]
C[Adapter]
B--继承IPhone-->C
A--组合MiPhone-->
C-->D(重写IPhone.getIOS方法,方法体中调用MiPhone.getAndroidOS)
- MiPhone 类
/**
* @author : mengshuo
* @Description : 小米手机类
*/
public class MiPhone {
public void getAndroidOS(){
System.out.println("我是安卓系统!");
}
}
- IPhone 类
/**
* @author : mengshuo
* @Description : 苹果手机类
*/
public class IPhone {
public void getIOS(){
System.out.println("我是 iOS !");
}
}
- 适配器 Adapter 类
/**
* @author : mengshuo
* @Description : 适配器类 将 安卓 适配到 IOS ....
*/
public class Adapter extends IPhone {
private MiPhone miPhone;
/**
* 构造方法
* @param miPhone
*/
public Adapter(MiPhone miPhone) {
this.miPhone = miPhone;
}
@Override
public void getIOS() {
miPhone.getAndroidOSOS();
}
}
- 测试代码
/**
* @author : mengshuo
* @Description : 测试
*/
public class Test {
public static void main(String[] args) {
//向父类转型
IPhone iPhone = new Adapter(new MiPhone());
iPhone.getIOS();
//结果: 我是安卓系统!
}
}
类适配器模式
graph TD
A[MiPhone]
B[IPhone]
C[Adapter]
B--实现IPhone-->C
A--继承MiPhone-->
C-->D(实现IPhone.getIOS方法,方法体中调用MiPhone.getAndroidOS)
- MiPhone 类
/**
* @author : mengshuo
* @Description : 小米手机类
*/
public class MiPhone {
public void getAndroidOS(){
System.out.println("我是安卓系统!");
};
}
- IPhone 类
/**
* @author : mengshuo
* @Description : 苹果手机类
*/
public interface IPhone {
void getIOS();
}
- 适配器 Adapter 类
/**
* @author : mengshuo
* @Description : 适配器类 将 安卓 适配到 IOS ....
*/
public class Adapter extends MiPhone implements IPhone {
/**
* 实现 IPhone 的方法
*/
@Override
public void getIOS() {
//调用 MiPhone 的方法
getAndroidOS();
}
}
- 测试代码
/**
* @author : mengshuo
* @Description : 测试
*/
public class Test {
public static void main(String[] args) {
//向上转型
IPhone iPhone = new TestAdapter();
iPhone.getIOS();
//结果: 我是安卓系统!
}
}
总结
对象适配器模式通过组合
来实现适配器功能,而类的适配器模式通过多继承或实现
来实现适配器功能