访问者模式
访问者模式
访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
通过示例了解访问者模式
访问者模式(Visitor Pattern)是一种行为设计模式,它为对象结构提供一种方式,以独立于该结构的元素之外定义新操作。以下是一个简单的Java访问者模式示例,模拟一个简单的文件系统结构,其中访问者可以遍历并处理不同类型的文件:
首先,定义一个Element接口,代表文件系统中的元素:
public interface Element {
void accept(Visitor visitor);
}
接着,创建具体的元素类,如Directory和File:
public class Directory implements Element {
private String name;
private List<Element> elements = new ArrayList<>();
public Directory(String name) {
this.name = name;
}
public void add(Element element) {
elements.add(element);
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
for (Element element : elements) {
element.accept(visitor);
}
}
// getters, setters, etc.
}
public class File implements Element {
private String name;
public File(String name) {
this.name = name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
// getters, setters, etc.
}
然后,定义一个Visitor接口,包含访问元素的方法:
public interface Visitor {
void visit(Directory directory);
void visit(File file);
}
创建具体的访问者类,比如BackupVisitor,用于备份文件:
public class BackupVisitor implements Visitor {
private int backupCount = 0;
@Override
public void visit(Directory directory) {
System.out.println("Backing up directory: " + directory.getName());
}
@Override
public void visit(File file) {
System.out.println("Backing up file: " + file.getName());
backupCount++;
}
public int getBackupCount() {
return backupCount;
}
}
最后,使用访问者模式来遍历和处理文件系统:
public class VisitorPatternDemo {
public static void main(String[] args) {
Directory root = new Directory("root");
Directory subdir1 = new Directory("subdir1");
Directory subdir2 = new Directory("subdir2");
File file1 = new File("file1.txt");
File file2 = new File("file2.txt");
File file3 = new File("file3.txt");
root.add(subdir1);
root.add(subdir2);
subdir1.add(file1);
subdir2.add(file2);
subdir2.add(file3);
BackupVisitor backupVisitor = new BackupVisitor();
root.accept(backupVisitor);
System.out.println("Number of files backed up: " + backupVisitor.getBackupCount());
}
}
在这个例子中,访问者模式允许我们在不修改文件系统类(Directory和File)的基础上,添加新的操作(如备份)。BackupVisitor遍历文件系统,并对每个元素执行相应的操作。
-
抽象
-
封装
-
继承
-
多态