- 定义:将一个类的接口转成另一个类的接口, 适配器 模式可以将一个已有类转成另一个已有接口所需要的类,起到了适配的作用
- 上图上真相
类似如这种耳机转换头的就是一个适配器,type-c头是新手机所需要的接口,圆孔头耳机是老款耳机,耳机转换器就起到适配作用,废话不多说,上代码:
- 定义一个Type-C耳机接口,后面手机需要用到这个接口
/**
* typec耳机接口
*
* @date 2022/10/24 9:28
*/
public interface TypeCHoleHeadset {
/**
* 提供type-c耳机头
*
* @return
*/
String typecHeadphoneHead();
}
- 定义一个Type-C手机
import java.util.Objects;
/**
* type-c 手机
*
* @date 2022/10/24 9:26
*/
public class TypeCPhone {
/**
* 厂商手机听歌需要提供一个type-c接口的耳机
*
* @param typeCHoleHeadset
*/
public void listen(TypeCHoleHeadset typeCHoleHeadset) {
if (Objects.nonNull(typeCHoleHeadset)) {
System.out.println("耳机已经正常插入了");
}
}
}
- 定义一个圆孔耳机
/**
* 圆孔耳机
*
* @date 2022/10/24 9:25
*/
public class RoundHoleHeadset {
/**
* 圆孔耳机所提供的功能
*/
public String roundHoleHead() {
return "我提供了圆孔头";
}
}
- 定义一个Type-C耳机实现类,等会适配器用用到这个适配器
/**
* @date 2022/10/24 9:35
*/
public class TypeCHoleHeadsetImpl implements TypeCHoleHeadset {
@Override
public String typecHeadphoneHead() {
return "我提供了type耳机头";
}
}
- 重点来了,定义一个适配器,来讲圆孔耳机转成Type-C耳机
/**
* 耳机适配器
*
* @date 2022/10/24 9:32
*/
public class HeadphonesAdapter {
/**
* 耳机转换接口,将圆孔耳机转成type-c耳机
*
* @param roundHoleHeadset
* @return
*/
public TypeCHoleHeadset adapter(RoundHoleHeadset roundHoleHeadset) {
String holeHead = roundHoleHeadset.roundHoleHead();
// ... 经过一些列骚操作
return new TypeCHoleHeadsetImpl();
}
}
- 恭喜你,学会适配器设计模式,测试一波
/**
* @date 2022/10/24 9:39
*/
public class Test {
public static void main(String[] args) {
//首先准备好一个typec手机,一个圆孔耳机
TypeCPhone typeCPhone = new TypeCPhone();
RoundHoleHeadset roundHoleHeadset = new RoundHoleHeadset();
//定义一个适配器,将圆孔耳机转成typec耳机
HeadphonesAdapter headphonesAdapter = new HeadphonesAdapter();
TypeCHoleHeadset typeCHoleHeadset = headphonesAdapter.adapter(roundHoleHeadset);
//将Type-C耳机插入Type-C手机
typeCPhone.listen(typeCHoleHeadset);
}
}
一个超级简单的适配器模式完成,搞定