输出访问者模式的Java代码
时间: 2023-05-11 16:04:08 浏览: 56
以下是访问者模式的Java代码:
//抽象元素类
interface Element {
void accept(Visitor visitor);
}
//具体元素类
class ConcreteElementA implements Element {
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
class ConcreteElementB implements Element {
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
//抽象访问者类
interface Visitor {
void visit(ConcreteElementA element);
void visit(ConcreteElementB element);
}
//具体访问者类
class ConcreteVisitor1 implements Visitor {
public void visit(ConcreteElementA element) {
System.out.println("ConcreteVisitor1访问ConcreteElementA");
}
public void visit(ConcreteElementB element) {
System.out.println("ConcreteVisitor1访问ConcreteElementB");
}
}
class ConcreteVisitor2 implements Visitor {
public void visit(ConcreteElementA element) {
System.out.println("ConcreteVisitor2访问ConcreteElementA");
}
public void visit(ConcreteElementB element) {
System.out.println("ConcreteVisitor2访问ConcreteElementB");
}
}
//对象结构类
class ObjectStructure {
private List<Element> elements = new ArrayList<Element>();
public void attach(Element element) {
elements.add(element);
}
public void detach(Element element) {
elements.remove(element);
}
public void accept(Visitor visitor) {
for (Element element : elements) {
element.accept(visitor);
}
}
}
//客户端
public class Client {
public static void main(String[] args) {
ObjectStructure os = new ObjectStructure();
os.attach(new ConcreteElementA());
os.attach(new ConcreteElementB());
ConcreteVisitor1 visitor1 = new ConcreteVisitor1();
ConcreteVisitor2 visitor2 = new ConcreteVisitor2();
os.accept(visitor1);
os.accept(visitor2);
}
}