一、定义:
适配器模式是把一个类的接口变化成客户端所期待的另一种接口,从而使原本因接口不匹配的而无法在一起工作的两个类能够在一起进行工作
二、使用场景:
1.系统想用现有的类,而此类的接口不符合所期待的系统的需要,即不兼容
2.想建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类
3.需要统一输出的接口,但是输入类型不可预知情况
三、适配器模式分类:
3.1类适配器
![](https://img.haomeiwen.com/i5249989/209612bb1ad10bfb.png)
Adapter 继承自Adaptee,从而实现适配和转化
Target : 目标角色,也就是所期待得到的接口
Adapter:适配角色,将不兼容的方法,适配目标角色需要的接口或者方法
Adaptee: 需要适配和转换的角色
简单示例
日常生活中电压为220V,但是手机充电电压为5V,这时候,就需要一个手机电源适配器,将220V的电压转为手机能用的5V电压,如下所示:
/**
* des:adaptee角色,需要被装换的对象
* author:onexzgj
* time:2019/5/27
*/
public class Volt220 {
public int getVolt220(){
return 220;
}
}
/**
* Target对象,5V
*/
public interface FiveVolt {
int getVolt5();
}
/**
* des:Adapter对象
* author:onexzgj
* time:2019/5/27
*/
public class VoltAdapter extends Volt220 implements FiveVolt{
@Override
public int getVolt5() {
return getVolt220()/44;
}
}
public class Test {
public static void main(String[] args){
VoltAdapter adapter=new VoltAdapter();
System.out.println("转化后的电压为 : " + adapter.getVolt5());
//转化后的电压为 : 5
}
}
3.2对象适配器
![](https://img.haomeiwen.com/i5249989/151825d5d99f2a4f.png)
Adapter依赖Adaptee对象,即持有Adaptee的对象,从而实现适配和转化
Target : 目标角色,也就是所期待得到的接口
Adapter:适配角色,将不兼容的方法,适配目标角色需要的接口或者方法
Adaptee: 需要适配和转换的角色
简单示例
/**
* Target对象,5V
*/
public interface FiveVolt {
int getVolt5();
}
/**
* des:adaptee角色,需要被装换的对象
* author:onexzgj
* time:2019/5/27
*/
public class Volt220 {
public int getVolt220(){
return 220;
}
}
/**
* des:适配器
* author:onexzgj
* time:2019/5/27
*/
public class VoltAdapter implements FiveVolt{
private Volt220 mVolt220;
public VoltAdapter(Volt220 volt220){
this.mVolt220=volt220;
}
@Override
public int getVolt5() {
if (mVolt220!=null)
return mVolt220.getVolt220()/44;
return 220;
}
}
public class Test {
public static void main(String[] args){
int volt5 = new VoltAdapter(new Volt220()).getVolt5();
System.out.println(volt5);
}
}
Target : 目标角色,也就是所期待得到的接口
Adapter:适配角色,将不兼容的方法,适配目标角色需要的接口或者方法
Adaptee: 需要适配和转换的角色
四、两种适配的比较
对象适配器是将要适配的对象直接传递到Adapter中,使用组合的方式实现接口的兼容,比类适配器灵活,另外一个好处是被适配对象中的方法不会暴露出来,用户学习成本较低,而类适配器继承被适配对象,则会暴露出被适配对象的方法。
五、适配器设计模式优点
更好的复用性,将现有类,通过适配器设计模式就可以让现有类功能更好的复用。
更好的扩展性,在原有类的基础上,增加了自己适配的方法,从而扩展了系统功能。
网友评论