java 访问者模式 例子
时间: 2023-05-18 20:07:08 浏览: 207
JAVA设计模式之访问者模式详解
访问者模式是一种行为型设计模式,它允许你将算法与对象结构分离开来,使得算法可以独立于对象结构而变化。下面是一个简单的 Java 访问者模式的例子:
首先,我们定义一个抽象的元素类 Element,它有一个 accept 方法,接受一个访问者对象作为参数:
```
public abstract class Element {
public abstract void accept(Visitor visitor);
}
```
然后,我们定义两个具体的元素类,它们都继承自 Element 类:
```
public class ConcreteElementA extends Element {
public void accept(Visitor visitor) {
visitor.visitConcreteElementA(this);
}
}
public class ConcreteElementB extends Element {
public void accept(Visitor visitor) {
visitor.visitConcreteElementB(this);
}
}
```
接下来,我们定义一个抽象的访问者类 Visitor,它有两个 visit 方法,分别接受 ConcreteElementA 和 ConcreteElementB 对象作为参数:
```
public abstract class Visitor {
public abstract void visitConcreteElementA(ConcreteElementA element);
public abstract void visitConcreteElementB(ConcreteElementB element);
}
```
最后,我们定义两个具体的访问者类,它们都继承自 Visitor 类:
```
public class ConcreteVisitor1 extends Visitor {
public void visitConcreteElementA(ConcreteElementA element) {
System.out.println("ConcreteVisitor1 visit ConcreteElementA");
}
public void visitConcreteElementB(ConcreteElementB element) {
System.out.println("ConcreteVisitor1 visit ConcreteElementB");
}
}
public class ConcreteVisitor2 extends Visitor {
public void visitConcreteElementA(ConcreteElementA element) {
System.out.println("ConcreteVisitor2 visit ConcreteElementA");
}
public void visitConcreteElementB(ConcreteElementB element) {
System.out.println("ConcreteVisitor2 visit ConcreteElementB");
}
}
```
现在,我们可以使用访问者模式来访问元素了。首先,我们创建两个元素对象:
```
Element elementA = new ConcreteElementA();
Element elementB = new ConcreteElementB();
```
然后,我们创建两个访问者对象:
```
Visitor visitor1 = new ConcreteVisitor1();
Visitor visitor2 = new ConcreteVisitor2();
```
最后,我们让元素对象接受访问者对象的访问:
```
elementA.accept(visitor1);
elementA.accept(visitor2);
elementB.accept(visitor1);
elementB.accept(visitor2);
```
输出结果如下:
```
ConcreteVisitor1 visit ConcreteElementA
ConcreteVisitor2 visit ConcreteElementA
ConcreteVisitor1 visit ConcreteElementB
ConcreteVisitor2 visit ConcreteElementB
```
这就是一个简单的 Java 访问者模式的例子。
阅读全文