个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片
文章中部分定义和解释性文字,都是引用百度百科,主要的代码及场景应用为本人原创
配器模式将一个类的接口适配成用户所期待的
场景:现在手机的数据接口有两种type-c和micro-usb,加入你现在有一个micro-usb的数据线,想给一个type-c接口的手机充电或者传输数据,这时你就需要一个适配器了;
方式
这里介绍两种适配器设计方式:
- 对象适配器模式
– 在这种适配器模式中,适配器容纳一个它包裹的类的实例。适配器调用被包裹对象的物理实体。 - 类适配器模式
– 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。
设计
对象适配器
类适配器
实现
代码地址:https://github.com/telundusiji/designpattern
公共代码:
目标接口 TypeC接口
public interface TypeC {
void usb3Data();
void electric();
}
源接口 MicroUSB
public interface MicroUSB {
void usb2Data();
void electric();
}
源 MicroUSB数据线
@Slf4j
public class MicroUSBCable implements MicroUSB {
@Override
public void usb2Data() {
log.info("我是MicroUSB数据传输");
}
@Override
public void electric() {
log.info("我是MicroUSB充电");
}
}
使用者 TypeC接口手机
public class TypeCPhone {
public void charging(TypeC typeC){
typeC.electric();
}
public void dataTransfer(TypeC typeC){
typeC.usb3Data();
}
}
######1、类适配器
public class MicroUSBToTypeCAdapter extends MicroUSBCable implements TypeC {
@Override
public void usb3Data() {
super.usb2Data();
}
@Override
public void electric() {
super.electric();
}
}
######2、对象适配器
public class MicroUSBToTypeCAdapter implements TypeC {
private MicroUSB microUSB;
public MicroUSBToTypeCAdapter(MicroUSB microUSB) {
this.microUSB = microUSB;
}
@Override
public void usb3Data() {
microUSB.usb2Data();
}
@Override
public void electric() {
microUSB.electric();
}
}
经典使用
JDK中InputStreamReader和OutputStreamWriter分别实现了,Reader和Writer接口,创建实例时,分别需要传入InputStream和OutputStream对象,这是一个典型的对象适配器;
- Reader和Writer时目标接口
- InputStreamReader和OutputStreamWriter是对象适配器
- InputStream和OutputStream是源接口
将InputStream和OutputStream的源适配成Reader和Writer的目标
个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片