白话-23种设计模式7-适配器模式
【摘要】 一、白话 适配器模式,最重要的就是适配。将不匹配的两端接起来就是适配。常见的手机充电只能是5V,但是家用是220V,需要充电头适配,将220V转换成5V。手机电压不能改变,出厂就设置好了。家用电压220V,不能改变,统一的。中间的适配器就得到了合理的存在意义,适配了两端,充电头就是适配器。二、定义 将一个接口转换成用户希望的另一个接口就是适配器模式。使得原先无法兼容的接口能一起工作。 ...
一、白话
适配器模式,最重要的就是适配。将不匹配的两端接起来就是适配。常见的手机充电只能是5V,但是家用是220V,需要充电头适配,将220V转换成5V。手机电压不能改变,出厂就设置好了。家用电压220V,不能改变,统一的。中间的适配器就得到了合理的存在意义,适配了两端,充电头就是适配器。
二、定义
将一个接口转换成用户希望的另一个接口就是适配器模式。使得原先无法兼容的接口能一起工作。
模式分为:
- 类适配器:以类适配,适配器继承被适配类 -- 继承主导,需要重写原先的接口的时候使用
- 对象适配器:以对象适配,适配器聚合被适配类 -- 组合主导,使用关联关系代替继承关系,避免了单继承问题,使用更加灵活
- 接口适配器:以接口适配,适配器聚合适配接口 -- 实现主导,体现在不需要将接口的所有方法都适配的情况
三、示例
类适配器
/**
* 适配器接口角色
*/
public interface IVoltageAdapter {
public int getPower5V();
}
/**
* 类适配器,具体适配器角色,通过继承原始接口实现
*/
public class VoltageAdapter extends Power implements IVoltageAdapter {
@Override
public int getPower5V() {
return getPower220V() / 44;
}
}
对象适配器
/**
* 对象适配器,具体适配器角色,使用关联关系代替继承
*/
public class VoltageAdapter2 implements IVoltageAdapter {
private Power power;
public VoltageAdapter2(Power power) {
this.power = power;
}
@Override
public int getPower5V() {
return power.getPower220V() / 44;
}
}
接口适配器
/**
* 适配器接口角色
*/
public interface IVoltageAdapter2 {
public int getPower5V();
public int getPower10V();
public int getPower20V();
public int getPower220V();
}
/**
* 接口适配器,具体适配器角色,抽象类,实现所有方法
*/
public abstract class AbstractAdapter implements IVoltageAdapter2 {
public int getPower5V(){
return 0;
}
public int getPower10V(){
return 0;
}
public int getPower20V(){
return 0;
}
public int getPower220V(){
return 0;
}
}
/**
* 接口适配器,具体适配器角色,只实现必要的接口,其余接口不用实现
*/
public class VoltageAdapter3 extends AbstractAdapter {
public int getPower5V(){
return 5;
}
}
输出示例
/**
* 客户端
*/
public class Client {
public static void main(String[] args) {
// 类适配-客户需要5V电压
VoltageAdapter voltageAdapter = new VoltageAdapter();
int result = voltageAdapter.getPower5V();
System.out.println("result = " + result);
// 对象适配-客户需要5V电压
VoltageAdapter2 voltageAdapter2 = new VoltageAdapter2(new Power());
int result2 = voltageAdapter2.getPower5V();
System.out.println("result2 = " + result2);
// 接口适配-客户需要5V电压
VoltageAdapter3 voltageAdapter3 = new VoltageAdapter3();
int result3 = voltageAdapter3.getPower5V();
System.out.println("result3 = " + result3);
}
}
四、总结
对软件系统中,如果要复用以前的“现存对象”,但是这些对象所提供的接口并不一定能适应我们的新环境,我们就要对其转换成我们需要的接口,来供我们调用。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)