适配器模式

 一、适配器模式(Adapter Pattern)的定义
1、适配器模式:将一个类的接口转换成客户希望的另外一个接口。
     当你想使用一个已有的类,但这个类的接口跟你的不一样,不能拿来直接用,这时需要一个适配器。
2、例子:港版的iPhone6的充电器插头是英标的,他是那种三角的方形的插头。

而国标的插头是两只脚,基石是三只脚的插头也和英标不一样。
(这里假设国标插头就只是两只脚的插头)

示例代码:
// 国标插头
public interface CnPluginInterface {
     void chargeWith2Pins();
}
// 实现国标插座的充电方法
public class CnPlugin implements CnPluginInterface {
public void chargeWith2Pins() {
     System.out.println("charge with CnPlugin");
}
}
// 在国家中内充电
public class Home {
private CnPluginInterface cnPlugin;
public Home() { }
public Home(CnPluginInterface cnPlugin) {
     this.cnPlugin = cnPlugin;
}
public void setPlugin(CnPluginInterface cnPlugin) {
     this.cnPlugin = cnPlugin;
}
// 充电
public void charge() {
     // 国标充电
     cnPlugin.chargeWith2Pins();
}
}
// 国标测试类
public class CnTest {
public static void main(String[] args) {
CnPluginInterface cnPlugin = new CnPlugin();
Home home = new Home(cnPlugin);
// 会输出 “charge with CnPlugin”
home.charge();
}
}
当把iPhone6带回家时,因为和家里的插座不匹配,所以需要一个适配器。
这个适配器必须满足以下条件:
1、必须符合国内标准的接口,否则的话还是没办法插到国内插座中;
2、在调用上面实现的国标接口进行充电时,提供一种机制,将这个调用转到对英标接口的调用。

这就要求:
1、适配器必须实现原有的旧的接口
2、适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口

// 英标插头
public interface EnPluginInterface {
     void chargeWith3Pins();
}
// 实现英标插座的充电方法
public class EnPlugin implements EnPluginInterface {
public void chargeWith3Pins() {
     System.out.println("charge with EnPlugin");
}
}
//适配器
public class PluginAdapter implements CnPluginInterface {
private EnPluginInterface enPlugin;
public PluginAdapter(EnPluginInterface enPlugin) {
     this.enPlugin = enPlugin;
}
// 这是重点,适配器实现了英标的插头,然后重载国标的充电方法为英标的方法
@Overridepublic
void chargeWith2Pins() {
     enPlugin.chargeWith3Pins();
}
}
// 适配器测试类
public class AdapterTest {
public static void main(String[] args) {
EnPluginInterface enPlugin = new EnPlugin();
Home home = new Home();
PluginAdapter pluginAdapter = new PluginAdapter(enPlugin); home.setPlugin(pluginAdapter);
// 会输出 “charge with EnPlugin”
home.charge();
}
}

总结:适配器模式的三个特点:
(1)适配器对象实现原有接口
(2)适配器对象组合一个实现新接口对象(这个对象也可以不实现一个接口,只是一个单纯的对象)
(3)对适配器原有接口方法的调用被委托给新接口的实例的特定方法







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值