组合模式,创造多元宇宙的桥梁!

50 篇文章 0 订阅
44 篇文章 0 订阅

组合模式,创造多元宇宙的桥梁!

​ 大家好呀!抬头看,天空中满满写着四个大字,设计模式!今天又是设计模式的一天,今天要讲的是组合模式,创造多元宇宙的桥梁,是属于设计模式中的结构型模式

​ 不知道大家有没有想过**,文件系统结构是怎么设计的**,文件夹里既能放文件,也能放文件夹,然后里面的文件夹又能放文件和文件夹。如果说让你用代码的方式来实现这样一个结构,你会怎么设计呢?

在这里插入图片描述

​ 许多办公软件都可以展示组织架构,比如说某组织的CEO直接管理数十员工,这数十员工里可能某员工A有自己直接管辖的人,员工A可能管辖了数百人,例如员工B等。但是在CEO看来,员工A是它的下级,但是在员工B看来,员工A是它的上级,并且CEO、员工A、员工B本质上都是员工。那么这要怎么设计呢?

在这里插入图片描述

​ 其实不论是文件系统,或者是组织架构,都是使用的组合模式来实现的,它的实现过程非常的简单。和我们平常写题目用到的递归非常的相似。组合模式将对象组合成树形结构表示的层次结构,可能你即是员工,又是领导,组合模式模糊简单和复杂的概念,让用户忽略单个对象和组合对象的不同,统一的使用组合结构中的对象,用来表示部分-整体,他创建了对象组的树形结构。

​ 听起来可能有点抽象,其实本质上就是树上的树枝和叶子节点都实现的统一接口,咱们直接上代码:

public abstract class File {
    private String name;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void display(String tag);
}

public class Folder extends File {

    private List<File> files;

    public Folder(String name) {
        super(name);
        files = new ArrayList<File>();
    }

    public void display(String tag) {
        System.out.println(tag + "文件夹 : " + this.getName());
        for(File file : files) {
            file.display(tag + "----");
        }
    }

    public void add(File file) {
        files.add(file);
    }

    public void remove(File file) {
        files.remove(file);
    }
}

public class CommonFile extends File {


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

    public void display(String tag) {
        System.out.println(tag + "普通文件 : " + this.getName());
    }
}

public class Client {
    public static void main(String[] args) {
        Folder folder1 = new Folder("文件夹1");

        CommonFile commonFile1 = new CommonFile("文件1");
        CommonFile commonFile2 = new CommonFile("文件2");
        Folder folder2 = new Folder("文件夹2");
        CommonFile commonFile3 = new CommonFile("文件3");

        folder1.add(commonFile1);
        folder1.add(commonFile2);
        folder1.add(folder2);
        folder1.add(commonFile3);

        CommonFile commonFile4 = new CommonFile("文件4");
        Folder folder3 = new Folder("文件夹3");

        folder2.add(commonFile4);
        folder2.add(folder3);

        folder1.display("----");

    }
}

----文件夹 : 文件夹1
--------普通文件 : 文件1
--------普通文件 : 文件2
--------文件夹 : 文件夹2
------------普通文件 : 文件4
------------文件夹 : 文件夹3
--------普通文件 : 文件3

​ 好啦,本章组合模式,创造多元宇宙的桥梁就到这里啦!希望本篇文章对你有所帮助。

在这里插入图片描述

愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。

道阻且长,往事作序,来日为章。

期待我们下一次相遇!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KnightHONG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值