文章目录
类结构
数据相关
数据的抽象类/接口
定义两个抽象方法:
一个用于数据处理
一个用于与访问者建立依赖关系,方法传入访问者
数据的具体实现类
实现抽象类或接口,实现两个抽象方法,完成具体的数据处理和将自身传递给访问者
访问者相关
访问者的抽象类/接口
定义多个重载的抽象方法,方法用于访问不同的数据,方法传入数据类型
访问者的具体实现类
实现抽象类或接口,实现多个重载的抽象方法,完成具体的数据访问
数据与访问者的关系
并没有建立紧密的耦合关系,而是通过定义方法的参数为对方类型,建立松耦合关系
代码实例
数据相关代码
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);
}
}