Java设计模式 之 适配器模式
假设现在有个需求是为小米手机充电,但是我们现在只有苹果的Lightning的充电器,小米只支持 TypeC接口 及 Usb接口充电 ,这时候会想到为苹果充电器适配这两种接口,代码如何实现呢?
这时候我们选择 适配器模式 就可以比较完美解决我们的问题:
我们先为TypeC充电器适配,先构造一个充电器的接口,代码如下:
public interface ITypeCCharger {
//充电
void charge();
}
再构建个TypeC充电器设配器设配苹果Ligntning充电器,
public class LightningCharger implements ITypeCCharger{
@Override
public void charge() {
//输入电源,手机充电
}
}
以接口的实现方式实现适配
public class TypeCChargerAdapter implements ITypeCCharger{
LightningCharger lightningCharger;
@Override
public void charge() {
// 使用Lightning充电器为手机充电
lightningCharger.charge();
}
}
此时为小米手机充电,充电显示正常,代码如下:
public class XiaomiPhone {
TypeCChargerAdapter adapter = new TypeCChargerAdapter();
//传入adapter对象
public void chargeFrom(ITypeCCharger charger) {
charger.charge();
}
}
我们可以发现小米手机类chargeFrom充电的时候不会关心具体类的实现,只要的可以符合接口的规划就可以,这就是适配器模式,适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
其中适配器可以分为 类适配器 及 对象适配器 ,上面的例子是 对象适配器 主要用接口实现,我们再举个Usb的例子,用类适配器模式描写,代码如下:
//usb充电器
public class UsbCharger{
public void charge() {
}
}
以继承的实现方式实现适配
public class UsbChargeAdapter extends UsbCharger{
LightningCharger lightningCharger;
@Override
public void charge() {
lightningCharger.charge();
}
}
手机充电
public class XiaomiPhone {
public void chargeFrom(UsbCharger charger) {
charger.charge();
}
}
那两个有什么区别呢,其实差别很小,对象适配器是以组合来实现,类适配器是以继承来实现,那什么时候使用哪种模式呢?
当你知道只需要适配 一个特定的类的 话,你可以使用类适配器,可以减少代码量,
但你需要 对象可以极大扩展 则可以选择对象适配器用接口来实现,这可以极大的扩展代码的灵活性。
其他模式可点击链接进目录阅读了解:http://blog.csdn.net/xiao_wanzi94/article/details/78118092