类结构
数据相关类
数据的抽象类/接口
定义两个抽象方法:
一个用于数据处理
一个用于与访问者建立依赖关系,方法传入访问者
数据的具体实现类
实现抽象类或接口,实现两个抽象方法,完成具体的数据处理和将自身传递给访问者
访问者相关类
访问者的抽象类/接口
定义多个重载的抽象方法,传入不同的数据类型,用于访问不同的数据
访问者的具体实现类
实现抽象类或接口,实现多个重载的抽象方法,完成具体的数据访问
类之间的关系
数据与访问者是相互依赖,多对多的关系,一个数据多个访问者访问,一个访问者访问多个数据
抽象出数据接口和访问者接口,类似MVP针对MVC的升级,使用接口适应M与V的多对多关系
代码实例
数据相关类
interface Data {
void accept(Vistor visitor);
String handle();
}
class Data1 implements Data {
void accept(Visitor visitor) {
vistor.visit(this);
}
String handle() {
return "data1"
}
}
class Data2 implements Data {
void accept(Visitor visitor) {
vistor.visit(this);
}
String handle() {
return "data1"
}
}
访问者相关类
interface Visitor {
void visit(Data1 data);
void visit(Data2 data);
}
class Visitor1 implements Visitor {
void visit(Data1 data) {
String result = data.handle();
//对result处理
System.out.println(result)
}
void visit(Data2 data) {
String result = data.handle();
//对result处理
System.out.println(result)
}
}
数据访问操作相关代码
void main() {
List<Data> dataList = new ArrayList<Data>();
dataList.add(new Data1());
dataList.add(new Data2());
//
Visitor visitor1 = new Visitor1();
Visitor visitor2 = new Visitor2();
//
for(Data data: dataList) {
data.visit(vistor1);
data.visit(visitor2);
}
}
总结
访问者与数据如果是多对多的关系,可以采用访问者模式