温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java怎么实现树形结构管理的组合设计模式

发布时间:2023-04-24 16:11:28 来源:亿速云 阅读:113 作者:iii 栏目:开发技术

今天小编给大家分享一下Java怎么实现树形结构管理的组合设计模式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

介绍

Java组合模式(Composite Pattern)是一种结构型设计模式,允许你将对象组合成树状结构,并且能像使用独立对象一样使用它们.

组合模式包含以下3种角色:

  • 抽象构建(Component):是组合中对象声明接口,可以包含其他对象,可以定义公共行为和管理子对象的方法.

  • 叶子节点(Leaf):是组合中的简单对象,没有包含其他对象的能力.

  • 组合节点(Composite):有叶子节点和组合节点作为子节点的对象,通常会把子节点存储到一个结合中,实现抽象构建接口中的方法.

组合模式的核心思想是将叶子节点和组合节点看作同一种类型的对象,让它们拥有相同的接口,从而在使用时能够无差别对待.

实现

假设我们正在编写一个文件系统的程序,需要实现对目录和文件的管理.我们可以使用组合模式来处理这种问题.

抽象构件

public abstract class AbstractFile {
    protected String name;
    public AbstractFile(String name) {
        this.name = name;
    }
    /**
     * 输入文件名;包含节点下的子节点
     */
    public abstract void display();
    /**
     * 添加文件
     * @param file
     */
    public abstract void add(AbstractFile file);
    /**
     * 删除文件
     * @param file
     */
    public abstract void remove(AbstractFile file);
}

叶子节点

public class File extends AbstractFile {
    public File(String name) {
        super(name);
    }
    /**
     * 输入文件名;包含节点下的子节点
     */
    @Override
    public void display() {
        System.out.println("这是文件:" + name);
    }
    /**
     * 添加文件
     *
     * @param file
     */
    @Override
    public void add(AbstractFile file) {
        throw new UnsupportedOperationException("文件不支持添加操作");
    }
    /**
     * 删除文件
     *
     * @param file
     */
    @Override
    public void remove(AbstractFile file) {
        throw new UnsupportedOperationException("文件不支持删除操作");
    }
}

组合节点

public class Directory extends AbstractFile {
    private List<AbstractFile> fileList = new ArrayList<>();
    public Directory(String name) {
        super(name);
    }
    @Override
    public void add(AbstractFile file) {
        fileList.add(file);
    }
    @Override
    public void remove(AbstractFile file) {
        fileList.remove(file);
    }
    /**
     * 输入文件名;包含节点下的子节点
     */
    @Override
    public void display() {
        System.out.println("这是目录:" + name);
        fileList.forEach(AbstractFile::display);
    }
}

测试

public class Demo {
    public static void main(String[] args) {
        AbstractFile root = new Directory("根目录");
        AbstractFile file1 = new File("文件1");
        AbstractFile file2 = new File("文件2");
        AbstractFile file3 = new File("文件3");
        AbstractFile file4 = new File("文件4");
        AbstractFile directory1 = new Directory("目录1");
        AbstractFile directory2 = new Directory("目录2");
        directory1.add(file1);
        directory1.add(file2);
        directory1.add(directory2);
        directory2.add(file3);
        directory2.add(file4);
        root.add(directory1);
        root.display();
    }
}

Java怎么实现树形结构管理的组合设计模式

以上代码是一个完整的Java组合模式的示例,实现了一个简单的文件系统结构.根据文件和目录的特点,将其抽象为AbstractFile类,并定义了name属性以及抽象方法add();remove();display()并实现了两个具体的子类File和Directory.

在Directory类中,使用了一个List来储存文件和子目录,实现了add()和remove()方法,可以像其中添加和删除文件和子目录.同时display()方法遍历并打印出其子节点信息.

在File类中,由于文件没有子节点,因此在add()和remove()方法中抛出了UnsupportedOperationException异常,同时display()直接打印出文件信息.

以上就是“Java怎么实现树形结构管理的组合设计模式”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI