java设计模式十一(组合模式)

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();
    }
}

猜你喜欢

转载自blog.csdn.net/xiaolicd/article/details/81357155
今日推荐