小蔡学Java

Java之设计模式 (十五)

2023-09-25 23:34 806 0 设计模式 设计模式组合模式

组合模式(Composite Pattern)

  组合模式是一种结构型设计模式,它允许将对象组合成树形结构,以表示“部分-整体”的层次关系。组合模式可以让客户端使用统一的方式处理单个对象和组合对象,从而简化了客户端的代码。

使用场景

  • 当需要表示一个对象的部分-整体层次结构时,可以使用组合模式。例如,可以使用组合模式来表示一个文件夹,它包含多个文件和其他文件夹。

  • 当客户端代码需要统一地处理单个对象和组合对象时,可以使用组合模式。这样客户端代码可以使用相同的代码来处理单个对象和组合对象,而不需要进行特判。

  • 当需要对树形结构进行递归遍历时,可以使用组合模式。组合模式可以让代码更加简洁,而且可以轻松地遍历整个树形结构

  • 当需要动态地添加或删除树形结构中的子节点时,可以使用组合模式。组合模式可以让你方便地添加或删除子节点,而且不会影响其他节点的行

代码实现

以下是另一个使用Java组合模式的例子,它表示一个文件系统:


public class FileSystem {
    private String name;
    private boolean isFile;
    private List<FileSystem> children = new ArrayList<>();

    public FileSystem(String name, boolean isFile) {
        this.name = name;
        this.isFile = isFile;
    }

    public void add(FileSystem fileSystem) {
        children.add(fileSystem);
    }

    public void remove(FileSystem fileSystem) {
        children.remove(fileSystem);
    }

    public void display(int depth) {
        System.out.println("-".repeat(depth) + name);

        for (FileSystem fileSystem : children) {
            fileSystem.display(depth + 2);
        }
    }

    public static void main(String[] args) {
        FileSystem root = new FileSystem("C:", false);
        FileSystem windowsFolder = new FileSystem("Windows", false);
        FileSystem programFilesFolder = new FileSystem("Program Files", false);
        FileSystem notepadFile = new FileSystem("notepad.exe", true);
        FileSystem javaFolder = new FileSystem("Java", false);
        FileSystem eclipseFolder = new FileSystem("Eclipse", false);
        FileSystem eclipseExeFile = new FileSystem("eclipse.exe", true);

        root.add(windowsFolder);
        root.add(programFilesFolder);
        programFilesFolder.add(javaFolder);
        javaFolder.add(eclipseFolder);
        eclipseFolder.add(eclipseExeFile);
        windowsFolder.add(notepadFile);

        root.display(0);
    }
}

  在这个例子中,FileSystem表示一个文件系统中的文件或文件夹,它有一个name属性和一个isFile属性,用于判断它是文件还是文件夹。add和remove方法用于添加或删除子节点,display方法用于递归地打印整个文件系统。   在main方法中,我们创建了一个C:盘的文件系统,并添加了Windows文件夹、Program Files文件夹、notepad.exe文件、Java文件夹、Eclipse文件夹和eclipse.exe文件。我们将这些文件和文件夹按照层次结构组织起来,方便用户查看整个文件系统。 运行这个程序会输出以下结果:

--Windows
----notepad.exe
--Program Files
----Java
------Eclipse
--------eclipse.exe

使用小结   组合模式可以用于处理具有树形结构的对象集合。比如组织架构图、文件系统、图形场景图等。使用组合模式可以方便地组合对象,以实现复杂的功能。

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录