知识回顾:
之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)—行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)—行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】
【Java中23种面试常考的设计模式之迭代器模式(Iterator)—行为型模式】
【Java中23种面试常考的设计模式之访问者模式(Visitor)—行为型模式】
【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】
【Java中23种面试常考的设计模式之解释器模式(Interpreter)—行为型模式】
【Java中23种面试常考的设计模式之命令模式(Command)—行为型模式】
【Java中23种面试常考的设计模式之责任链模式(Chain of Responsibility)—行为型模式】
【Java中23种面试常考的设计模式之适配器模式(Adapter)—结构型模式】
【Java中23种面试常考的设计模式之桥接模式(Bridge)—结构型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之组合模式(Composite)—结构型模式】。
组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构,从而使客户端可以使用统一的方式处理部分对象和整体对象。
抽象构件(Component)角色: 定义了叶子和容器构件的共同点
叶子(Leaf)角色:无子节点
容器(Composite)角色:有容器特征,可以包含子节点
Main–Client:测试类

栗子,既然我们的组合模式在处理文件系统上有绝对的优势,那么我们就来实现一个简单的案例(因为我们的文件系统底层就是通过树状结构来实现)package com.composite;public interface FileComponent {void operiation();
}
package com.composite;public class ImageLeaf implements FileComponent{private String name;public ImageLeaf(String name) {super();this.name = name;}@Overridepublic void operiation() {System.out.println("图片文件:"+name+" 处理操作");}
}
package com.composite;public class TextLeaf implements FileComponent{private String name;public TextLeaf(String name) {super();this.name = name;}@Overridepublic void operiation() {System.out.println("文本文件:"+name+" 处理操作");}
}
package com.composite;import java.util.ArrayList;
import java.util.List;public class FolderComposite implements FileComponent{private String name;// 定义容器,用来存储叶子节点 也就是存储文件private List list = new ArrayList<>();public FolderComposite(String name) {super();this.name = name;}public void add(FileComponent file){list.add(file);}public void remove(FileComponent file){list.remove(file);}public FileComponent getChild(int index){return list.get(index);}@Overridepublic void operiation() {System.out.println("处理:"+name+"文件夹");for (FileComponent file : list) {file.operiation();}}
}
package com.composite;public class Main {public static void main(String[] args) {FileComponent text= new TextLeaf("硕风和炜.txt");FileComponent image = new ImageLeaf("硕风和炜.jpg");FolderComposite composite = new FolderComposite("D:/硕风和炜");composite.add(text);composite.add(image);composite.operiation();}
}
运行结果展示:

好了,到这里【Java中23种面试常考的设计模式之组合模式(Composite)—结构型模式】就结束了,23种设计模式持续更新汇总中。