组合模式,创造多元宇宙的桥梁!
大家好呀!抬头看,天空中满满写着四个大字,设计模式!今天又是设计模式的一天,今天要讲的是组合模式,创造多元宇宙的桥梁,是属于设计模式中的结构型模式。
不知道大家有没有想过**,文件系统结构是怎么设计的**,文件夹里既能放文件,也能放文件夹,然后里面的文件夹又能放文件和文件夹。如果说让你用代码的方式来实现这样一个结构,你会怎么设计呢?
许多办公软件都可以展示组织架构,比如说某组织的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
好啦,本章组合模式,创造多元宇宙的桥梁就到这里啦!希望本篇文章对你有所帮助。
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。
道阻且长,往事作序,来日为章。
期待我们下一次相遇!