应用场景
适配器模式,英文名Adapter Pattern
该模式将一种类/对象/数据,适配为另一种预期的类/对象/数据,这样两种不同性质的类/对象/数据就可以同时工作
该模式的优点是,不用修改源角色和目标角色的代码,只需要修改或创建新的适配器,就可以完成转换功能
在实际应用中,只要是扮演转换功能的角色,都可以称之为适配器,没有绝对的形式要求
但主要的应用形式,一般有以下几种
类适配器
适配器继承自源角色,同时实现目标角色接口,这样就可以同时控制两种角色的功能
至于是targetWork调用originWork,还是originWork调用targetWork,或者是协同工作
这是由业务需要来决定的,实例代码只是随便举了一种情况,请不要死记硬背
//被适配者,源角色
public class Adaptee {
public void originWork() {
System.out.println("originWork");
}
}
//目标角色
public interface ITarget {
void targetWork();
}
//适配器,既保留Adaptee的功能,又具备ITarget功能
public class Adapter extends Adaptee implements ITarget {
@Override
public void targetWork() {
originWork();
}
}
对象适配器
适配器类包装一个源角色对象,同时实现目标角色接口,这样就可以同时控制两种角色的功能
//被适配者,源角色
public class Adaptee {
public void originWork() {
System.out.println("originWork");
}
}
//目标角色
public interface ITarget {
void targetWork();
}
//适配器,既保留Adaptee的功能,又具备ITarget功能
public class Adapter implements ITarget {
Adaptee adaptee = new Adaptee();
@Override
public void targetWork() {
adaptee.originWork();
}
}
数据适配器
适配器类专门负责将一种数据类型转换为另一种数据类型,源角色直接调用适配器对源数据进行转换,得到目标数据
这种模式只要动态指定源角色需要的适配器即可,一般配合泛型使用(在C++中叫模板类型)
//数据类
public class Data {
}
//控件类
public class View {
}
//适配器接口,负责将数据转换成控件
public interface IAdapter<DATA, VIEW> {
VIEW createView(DATA data);
void setData(List<DATA> dataList);
List<DATA> getData();
}
//列表控件
public class ListView {
IAdapter<Data, View> adapter;
//添加单个控件
public void addView(View view) {
}
//展示所有元素
public void display() {
List<Data> dataList = adapter.getData();
for (Data data : dataList) {
View view = adapter.createView(data);
addView(view);
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)