Java 设计模式 - 访问者模式

发布于 2024-08-27 11:27:24 字数 1641 浏览 10 评论 0

访问者模式 (Visitor) 是为了抽象出作用于一组复杂对象的操作,并且后续可以新增操作而不必对现有的对象结构做任何改动

访问者模式的核心思想是为了访问比较复杂的数据结构,不去改变数据结构,而是把对数据的操作抽象出来,在“访问”的过程中以回调形式在访问者中处理操作逻辑。如果要新增一组操作,那么只需要增加一个新的访问者。

访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦

Java 标准库提供的 Files.walkFileTree() 就实现了一个访问者模式

对 XML 的 SAX 处理也是一个访问者模式,我们需要提供一个 SAX Handler 作为访问者处理 XML 的各个节点

实现

我们来模拟遍历文件夹不同情况的处理

/**
* 文件访问者
*/
public interface FileVisitor {

void visitFile(File file);

void visitDir(File dir);

}

/**
* 文件扫描器
*/
public class FileScanner {

public static void scan(File file, FileVisitor fileVisitor) {
if(file.isDirectory()) {
fileVisitor.visitDir(file);
File[] files = file.listFiles();
for(File f : files) {
scan(f, fileVisitor);
}
} else {
fileVisitor.visitFile(file);
}
}
}

public class FileVisitorTest {

public static void main(String[] args) {
FileScanner.scan(new File("."), new FileVisitor() {
@Override
public void visitFile(File file) {
System.out.println("文件名: " + file.getName());
}

@Override
public void visitDir(File dir) {
System.out.println("文件夹名: " + dir);
}
});
}

}

这样就把递归遍历文件夹的过程封装起来,外部根据自己的实际要求获取所有的文件和文件夹或者只获取特定类型的文件

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

甜心

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文