一、简介
适配器模式(Adapter Pattern),此模式的作用就是兼容原本接口不匹配的两个类,起到桥梁的作用。
其实在Android
中平常接触的就很多,ListView
和GridView
到RecyclerView
都用到的Adapter
就用到了适配器模式,无论给Adapter
什么样的数据,最后到RecyclerView
显示的都是View
。
二、类适配器模式
类的适配器模式,采用继承实现的。
- target:目标接口,也就是期望得到的接口
- Adaptee:需要适配的接口
- Adapter:适配器,负责把
Adaptee
转换成Target
的类
不说远了,就说手机充电头,其实就是一个电源适配器,生活用电的电压是220v,而手机充电的电压是5v,所以这时候就需要使用到电源适配器将220v的电压转换为5v(如果你是直接插在插板的USB接口上的话,当我没说)。
对应上面的UML图, 生活电压就是Adaptee
,手机充电电压就是Target
,不用多说,电源适配器自然就是Adapter
了。
三、对象适配器模式
与类适配器模式不同的是,对象适配器模式不适用继承关系链接Adaptee
类,而是使用代理关系链接到Adaptee
类
这种实现方式直接将要被适配的对象传递到Adapter
中,使用组合的形式实现接口兼容的效果。比类适配器的实现方式更灵活,还有就是Adaptee
对象不会暴露出来,因为没有继承被适配对象。
四、类适配器实现
//Target接口
public interface Volt5 {
public int getVolt5();
}
//Adaptee类
public class Volt220 {
public int getVlot220(){
return 220;
}
}
//Adapter类
public class VoltAdapter extends Volt220 implements Volt5 {
@Override
public int getVolt5() {
return 5;
}
}
public class Client{
public static void main(String[] args){
VoltAdapter adapter = new VoltAdapter();
System.out.println("输出电压:" + adapter.getVolt5());
}
}
五、对象适配器实现
//Target接口
public interface Volt5 {
public int getVolt5();
}
//Adaptee类
public class Volt220 {
public int getVlot220(){
return 220;
}
}
//Adapter类
public class VoltAdapter implements Volt5 {
Volt220 volt220;
public VoltAdapter(Volt220 volt220){
this.volt220 = volt220;
}
public int getVolt220(){
return volt220.getVlot220();
}
@Override
public int getVolt5() {
return 5;
}
}
public class Client{
public static void main(String[] args){
VoltAdapter adapter = new VoltAdapter(new Volt220());
System.out.println("输出电压:" + adapter.getVolt5());
}
}
六、总结
优点
- 复用性好,当现有的类不符合需求时,通过适配器就可以使这些功能得到更好地复用。
- 扩展性好,可以更好地扩展系统的功能
缺点
过多的使用,会让代码更加凌乱。
————————————————————————
作者:MrTrying
链接:https://www.jianshu.com/p/c7f2967b6e48
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。