Java编写一个访问者模式的简单代码
时间: 2024-03-24 12:41:55 浏览: 22
好的,下面是一个访问者模式的简单示例代码,该代码模拟了对不同类型的元素进行访问和处理的过程:
```java
// 定义元素接口
interface Element {
void accept(Visitor visitor);
}
// 定义具体元素类A
class ElementA implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
public void operationA() {
System.out.println("执行元素A的操作");
}
}
// 定义具体元素类B
class ElementB implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
public void operationB() {
System.out.println("执行元素B的操作");
}
}
// 定义访问者接口
interface Visitor {
void visit(ElementA element);
void visit(ElementB element);
}
// 定义具体访问者类
class ConcreteVisitor implements Visitor {
@Override
public void visit(ElementA element) {
element.operationA();
}
@Override
public void visit(ElementB element) {
element.operationB();
}
}
// 定义对象结构类
class ObjectStructure {
private List<Element> elements = new ArrayList<>();
public void add(Element element) {
elements.add(element);
}
public void remove(Element element) {
elements.remove(element);
}
public void accept(Visitor visitor) {
for (Element element : elements) {
element.accept(visitor);
}
}
}
// 主函数
public class Main {
public static void main(String[] args) {
ElementA elementA = new ElementA();
ElementB elementB = new ElementB();
ObjectStructure objectStructure = new ObjectStructure();
objectStructure.add(elementA);
objectStructure.add(elementB);
Visitor visitor = new ConcreteVisitor();
objectStructure.accept(visitor);
}
}
```
在该示例代码中,元素接口 `Element` 定义了一个 `accept` 方法,该方法用于接受一个访问者对象,并调用该访问者的 `visit` 方法。各个具体元素类实现了 `Element` 接口,并在 `accept` 方法中调用了访问者的 `visit` 方法。
访问者接口 `Visitor` 定义了多个 `visit` 方法,每个 `visit` 方法接受一个具体元素对象作为参数,用于访问该具体元素对象并对其进行处理。各个具体访问者类实现了 `Visitor` 接口,并实现了各自的 `visit` 方法。
对象结构类 `ObjectStructure` 维护了一个元素列表,并提供了 `add`、`remove` 和 `accept` 方法。`accept` 方法接受一个访问者对象,并遍历元素列表,对每个元素调用其 `accept` 方法,从而触发访问者的 `visit` 方法。
在主函数中,创建了两个具体元素对象 `elementA` 和 `elementB`,并将它们添加到 `ObjectStructure` 对象中。然后创建了一个具体访问者对象 `visitor`,并将其传递给 `ObjectStructure` 对象的 `accept` 方法,从而触发对每个元素的访问和处理。最终输出了元素A和元素B的操作结果。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)