访问者模式(Visitor)
定义
表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
使用场景
主要角色
- 元素(Element)
- 具体元素(ConcreteElement)
- 访问者(Visitor)
- 具体访问者(ConcreteVisitor)
- 对象结构(ObjectStructure)
类图
示例代码
java
public interface Element {
void accept(Visitor visitor);
}
java
public class FolderElement implements Element {
private String name;
public FolderElement(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
java
public class FileElement implements Element {
private String name;
public FileElement(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
一般有几种元素就有几个visit方法
java
public interface Visitor {
void visit(FileElement fileElement);
void visit(FolderElement folderElement);
}
java
public class FileNameVisitor implements Visitor {
@Override
public void visit(FileElement file) {
System.out.println("File: " + file.getName());
}
@Override
public void visit(FolderElement folder) {
System.out.println("Folder: " + folder.getName());
}
}
java
public class Client {
public static void main(String[] args) {
Element folder = new FolderElement("code2024");
Element file = new FileElement("hello.java");
// 构建对象结构
FileSystemStructure fileSystem = new FileSystemStructure(folder,file);
// 创建访问者
Visitor fileVisitor = new FileNameVisitor();
// 对象结构接受访问者访问
fileSystem.accept(fileVisitor);
}
}
Folder: code2024
File: hello.java