Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java)这里使用的是复合模式和访问者模式还是唯一的访问者模式?_Java_Design Patterns_Aggregation_Composite_Visitor Pattern - Fatal编程技术网

(Java)这里使用的是复合模式和访问者模式还是唯一的访问者模式?

(Java)这里使用的是复合模式和访问者模式还是唯一的访问者模式?,java,design-patterns,aggregation,composite,visitor-pattern,Java,Design Patterns,Aggregation,Composite,Visitor Pattern,对不起,如果以前有人问过这个问题。我找不到一个问题能完全解决我现在的处境。我最接近于找到满意答案的是有人提到访问者模式和复合模式可以一起使用 我的问题是。假设您有一个文件系统,由包含文件的根目录和包含更多文件和目录的其他目录组成。这是复合模式,不是吗?假设我要设计一个具有不同访问者类的fileSystemVisitor接口,并使用它们遍历目录和文件。那么我的设计会是两者的结合吗?事实上,我不久前已经编写了代码。它工作得很好,但我的问题是我的代码是同时使用这两种模式还是只使用一个访问者。下面是Di

对不起,如果以前有人问过这个问题。我找不到一个问题能完全解决我现在的处境。我最接近于找到满意答案的是有人提到访问者模式和复合模式可以一起使用

我的问题是。假设您有一个文件系统,由包含文件的根目录和包含更多文件和目录的其他目录组成。这是复合模式,不是吗?假设我要设计一个具有不同访问者类的fileSystemVisitor接口,并使用它们遍历目录和文件。那么我的设计会是两者的结合吗?事实上,我不久前已经编写了代码。它工作得很好,但我的问题是我的代码是同时使用这两种模式还是只使用一个访问者。下面是DirectoryNode类的代码,它(显然)用于目录。我不是问代码是否正确,只是问它是否遵循复合模式的聚合部分

import java.util.*;

public class DirectoryNode implements FileSystemNode, Iterable<FileSystemNode> {
    private String name;
    private List<FileSystemNode> nodes;

    public DirectoryNode(String name, List<FileSystemNode> nodes) {
        this.name = name;
        this.nodes = nodes;
    }

    public String getName() {
        return name;
    }

    public Iterator<FileSystemNode> iterator() {
        return nodes.iterator();
    }

    public <T> T accept(FileSystemVisitor<T> v) {
        return v.visitDirectory(this);
    }
}
import java.util.*;
公共类DirectoryNode实现FileSystemNode,Iterable{
私有字符串名称;
私有列表节点;
public DirectoryNode(字符串名称、列表节点){
this.name=名称;
this.nodes=节点;
}
公共字符串getName(){
返回名称;
}
公共迭代器迭代器(){
返回nodes.iterator();
}
公共不接受(文件系统访问者v){
返回v.visitDirectory(本);
}
}
假设我在这个类中聚合FileSystemNode,对吗

这个UML图正确吗?还是说没有聚合箭头?

请记住:您知道Java有一个完整的文件遍历器api。。。也使用visitor()这个词,但除此之外:我不知道你在问什么。这听起来更像是:“请讨论/回顾”我们的方法。如果制定得不好,很抱歉。我本质上只是问我的DirectoryNode类的实现是否对应于复合模式,以及上面的UML图是否正确地表示了我的工作。您的图表显示,
FileSystemVisitor
依赖于
FileSystemNode
,但在您的代码中,
FileSystemNode
依赖于
FileSystemVisitor