访问者模式理解
1、访问者模式是为了将稳定的数据结构和对数据结构的变化多端的操作的解耦,可以让设计者针对同一套结构自由的设计操作的集合。也就是说,实现 数据操作 和 数据结构 的解耦。
具体的代码操作如下:
1、抽象数据结构的定义:提供一个接口,该接口能接受访问者作为参数传递给节点元素
public interface Element {
void accept(Viewer viewer);
}
2、具体数据结构:实现抽象节点元素声明的接口
public class ObjectStructure implements Element{
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public void accept(Viewer viewer) {
viewer.sumCount(this);
}
}
3、抽象访问者:声明所有访问者需要的接口
public interface Viewer {
void sumCount(ObjectStructure e);
}
4、具体访问者:实现抽象访问者声明的接口
public class ObjectViewer implements Viewer{
private int sumCount=0;
@Override
public void sumCount(ObjectStructure e) {
sumCount += e.getCount();
}
public int getSumCount() {
return sumCount;
}
public void setSumCount(int sumCount) {
this.sumCount = sumCount;
}
}
测试类:
public class TestViewer {
public static void main(String[] args) {
//声明一个数据结构
ObjectStructure e = new ObjectStructure();
//赋值初始值
e.setCount(10);
//声明一个访问者
ObjectViewer viewer = new ObjectViewer();
//实现访问者访问数据的操作
e.accept(viewer);
//访问者处理的数据的结构值
System.out.println(viewer.getSumCount());
}
}
可以避免了在数据结构体中进行数据的计算操作。当有多个计算逻辑时,可以实现抽象的访问接口多次,然后,每次调用时也通过访问者调用对应的数据逻辑操作,也可以避免一个方法体里书写多个if-else。