目录
1 介绍
适配器模式将一个类的接口转换成客户希望的另外一个接口。
2 类适配器
2.1 例子
使用一个220v电压充电器转5V电压给手机充电的例子。
2.1.1 原电源类(220V)
//220电源类
class Power220V {
private int Voltage = 220;
//返回电压
public int getVoltage() {
return this.Voltage;
}
}
当然,该类还可以含有其他方法,但是我关心就是这个输出电压这个方法,不能被我所用。
2.1.2 适配接口
//需要适配的接口
interface Power5V{
int get5Voltage();
}
接口表示,我需要这个被适配的类适配成什么样子。
2.1.3 适配器类
核心在于:继承被适配器,实现适配接口。
//适配器类
class VoltageAdapter extends Power220V implements Power5V{
@Override
public int get5Voltage() {
return this.getVoltage()/44;//被适配器怎么转成适配
}
}
2.1.4 测试主类
public class Main {
public static void main(String[] args) {
Power5V power=new VoltageAdapter();
System.out.println("获得电压:"+power.get5Voltage()+"V");
}
}
对外只有那个适配器接口和方法是可见的(使用),其余交给适配器去实现。
2.2 核心角色
- 被适配类:别人的类,不修改。
- 适配接口:希望得到什么东西,定义好。
- 适配器:继承被适配类,实现适配接口。
2.3 核心代码结构
继承被适配类,实现适配接口方法。
3 对象适配器
将被适配对象聚合到适配器中,实现适配器接口。
3.1 例子
3.1.1 被适配类
//220电源类
class Power220V {
private int Voltage = 220;
//返回电压
public int getVoltage() {
return this.Voltage;
}
}
3.1.2 适配接口
//需要适配的接口
interface Power5V{
int get5Voltage();
}
3.1.3 适配器
//适配器类
class VoltageAdapter implements Power5V{
private Power220V power220V=new Power220V();//虽然这里是组合,但是聚合肯定是较好的
@Override
public int get5Voltage() {
return power220V.getVoltage()/44;//实现适配功能
}
}
3.1.4 测试主类
public class Main {
public static void main(String[] args) {
Power5V power=new VoltageAdapter();
System.out.println("获得电压:"+power.get5Voltage()+"V");
}
}
3.2 核心角色
- 被适配类
- 适配接口
- 适配器类:聚合一个被适配对象,实现适配接口,在接口方法里面调用被适配对象方法,改成接口想要的样子。
3.3 核心代码结构
与类适配器不同的是对象适配器聚合了一个被适配的对象。
4 接口适配器
接口适配器实现部分不需要的接口(直接空实现{}无执行代码)。
4.1 例子
##是# 4.1.1 被适配接口
interface A {
void a0();
void a1();
void a2();
}
4.1.2 接口适配器
abstract class Adapter implements A {
public void a0() {
}
public void a1() {
}
public void a2() {
}
}
4.1.3 适配器使用类
class B extends Adapter {
public void a2() {
super.a2();
}
}
4.2 核心代码结构
因为java特性,实现类必须实现接口所有方法,但是有时候只需要实现部分方法,这时候可以加一个接口适配器,它是一个抽象类,但是空实现了所有的接口方法(知识点:抽象类可以不含抽象方法),当具体类再实现的时候,就可以选择性的去重写自己关注的方法了。
5 总结
适配器模式,主要在于适配器接口的设计,把原来那个不变的类(被适配器)处理成适配器接口想要的样子(方法)。