说明
适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
角色
- 源(Adaptee):需要被适配的对象或类型,相当于插头。
- 适配器(Adapter):连接目标和源的中间对象,相当于插头转换器。
- 目标(Target):期待得到的目标,相当于插座。
代码实现
适配器模式包括3种形式:类适配器模式、对象适配器模式、接口适配器模式(或又称作缺省适配器模式)
以下举例,最新智能手机用VGA接口适配实现充电
源:手机typeC充电
package com.zhouzy.sjms.adaptee;
public class Adaptee {
public void typeC(){
System.out.println("手机正在充电");
}
}
目标:vga充电
package com.zhouzy.sjms.adaptee;
public interface Target {
public void vga(); //目标,vga充电
}
1、类适配器模式
package com.zhouzy.sjms.adaptee;
public class Adapter extends Adaptee implements Target {
@Override
public void vga() {
typeC(); //vga实现typec充电
}
}
2、对象适配器
package com.zhouzy.sjms.adaptee;
public class AdapterObj implements Target {
Adaptee adaptee;
public AdapterObj(Adaptee adaptee){
this.adaptee = adaptee;
}
@Override
public void vga() {
adaptee.typeC(); //vga实现typec充电
}
}
3、接口适配器
定义一个接口,所有方法都定义好
package com.zhouzy.sjms.adaptee;
public interface ITarget {
public void typeC();
public void typeC2vga();
}
定义一个抽象实现类
package com.zhouzy.sjms.adaptee;
public abstract class AbsAdapter implements ITarget {
public void typec() {
}
public void typec2vga() {
}
}
具体实现类
package com.zhouzy.sjms.adaptee;
public class VgaAdapter extends AbsAdapter{ //其原理就是这个适配器同时实现了vga充电功能和typeC的充电功能
@Override
public void typeC() {
System.out.println("手机正在充电");
}
@Override
public void typeC2vga() {
System.out.println("手机正在充电");
}
}