访问者模式理解

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。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值