Java组合模式

Java组合模式

模式介绍

组合模式是一种树形结构的设计模式,它将对象组合成树形结构以表示部分整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合模式有两种类型的对象:叶子节点和组合节点。叶子节点代表组合的最终对象,而组合节点代表包含叶子节点或其他组合节点的对象。

优点

  • 对象的层次结构清晰
  • 可以统一处理组合对象和叶子对象
  • 增加节点或者叶子非常容易
  • 简化了客户端代码

缺点

  • 简单操作变得复杂
  • 要求对组合对象和叶子节点进行区分处理
  • 不容易限制组合对象中的组件类型

代码示例

实现一个文件系统

FileSystem组成了树形的结构,File作为叶子节点,Directory作为组合节点

abstract class FileSystem {
    protected String name;

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

    public abstract void add(FileSystem fileSystem);

    public abstract void remove(FileSystem fileSystem);

    public abstract void display();
}

class File extends FileSystem {
    public File(String name) {
        super(name);
    }

    @Override
    public void add(FileSystem fileSystem) {
        System.out.println("不支持添加操作");
    }

    @Override
    public void remove(FileSystem fileSystem) {
        System.out.println("不支持删除操作");
    }

    @Override
    public void display() {
        System.out.println(name);
    }
}

class Directory extends FileSystem {
    private List<FileSystem> fileSystemList = new ArrayList<>();

    public Directory(String name) {
        super(name);
    }

    @Override
    public void add(FileSystem fileSystem) {
        fileSystemList.add(fileSystem);
    }

    @Override
    public void remove(FileSystem fileSystem) {
        fileSystemList.remove(fileSystem);
    }

    @Override
    public void display() {
        System.out.println(name);
        for (FileSystem fileSystem : fileSystemList) {
            fileSystem.display();
        }
    }
}

调用

public class Main {
    public static void main(String[] args) {
        Directory directory1 = new Directory("目录1");
        Directory directory2 = new Directory("目录2");
        Directory directory3 = new Directory("目录3");
        Directory directory4 = new Directory("目录4");

        File file1 = new File("文件1");
        File file2 = new File("文件2");
        File file3 = new File("文件3");
        File file4 = new File("文件4");
        File file5 = new File("文件5");
        File file6 = new File("文件6");

        directory1.add(directory2);
        directory1.add(directory3);
        directory2.add(file1);
        directory2.add(file2);
        directory2.add(directory4);
        directory3.add(file3);
        directory4.add(file4);
        directory4.add(file5);
        directory4.add(file6);

        directory1.display();
    }
}

输出结果

目录1
目录2
文件1
文件2
目录4
文件4
文件5
文件6
目录3
文件3

总结

组合模式用于处理具有树形结构的对象,使得它们都可以按照统一的方式进行操作。组合模式使得客户端代码的复杂度得以降低。同时,组合模式也存在一些缺点,比如要求区分组合对象和叶子对象,处理操作相对于简单对象变得更加复杂。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值