java设计模式—组合模式
一.概述
组合模式又叫部分整体模式,把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
二.应用场景
1.多级树形菜单。
2.文件和文件夹目录
三.模式示例:
我们以文件和文件夹目录为例,看看组合模式具体实现:
1.创建节点类
public abstract class Node {
protected String name;
public Node(String name){
this.name = name;
}
public void addNode(Node node){
}
abstract void print();
}
2.创建文件类
public class FileNode extends Node{
public FileNode(String name) {
super(name);
}
@Override
public void print() {
System.out.println(name);
}
}
3.创建文件夹目录类。
public class FolderNode extends Node{
List<Node> nodeList = new ArrayList<Node>();
public FolderNode(String name) {
super(name);
}
public void addNode(Node node){
nodeList.add(node);
}
@Override
public void print() {
System.out.println(name);
for(Node node:nodeList){
node.print();
}
}
}
4.模式调用。
public class Test {
public static void createTree(Node node) throws Exception{
File file = new File(node.name);
File[] f = file.listFiles();
for(File fi : f){
if(fi.isFile()){
FileNode filer = new FileNode(fi.getAbsolutePath());
node.addNode(filer);
}
if(fi.isDirectory()){
FolderNode noder = new FolderNode(fi.getAbsolutePath());
node.addNode(noder);
createTree(noder);
}
}
}
public static void main(String[] args) {
Node FolderNode = new FolderNode("E:/test");
try {
createTree(FolderNode);
} catch (Exception e) {
e.printStackTrace();
}
FolderNode.print();
}
}