8、结构型模式-组合设计模式

2021-07-17  本文已影响0人  日落_3d9f

1、将对象组合成树形结构的模式-组合设计模式

组合设计模式

代码:
根节点,抽象类,通用的属性和方法

public abstract class Root {
    private String name;
    public Root(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public abstract void addFile(Root root);
    public abstract void removeFile(Root root);
    public abstract void display(int depth);
}

具体的文件夹,里面可以添加子文件夹或者文件

public class Folder extends Root {
    List<Root> folders = new ArrayList<>();
    public  Folder(String name){
        super(name);
    }

    public List<Root> getFolders() {
        return folders;
    }

    public void setFolders(List<Root> folders) {
        this.folders = folders;
    }

    @Override
    public void addFile(Root root) {
        folders.add(root);
    }

    @Override
    public void removeFile(Root root) {
        folders.remove(root);
    }

    @Override
    public void display(int depth) {
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<depth;i++){
            sb.append("-");
        }
        //打印横线和当前文件名
        System.out.println(sb.toString()+this.getName());
        for(Root r : folders){
            //每个下级,横线多2个
            r.display(depth+2);
        }
    }
}

这个类是没有节点,不用存储其他子类数组,所以是叶子节点

public class File extends Root{
    public File(String name){
        super(name);
    }
    @Override
    public void addFile(Root root) {

    }
    @Override
    public void removeFile(Root root) {

    }
    @Override
    public void display(int depth) {
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<depth;i++){
            sb.append("-");
        }
        //打印横线和当前文件名
        System.out.println(sb.toString()+this.getName());
    }
}

Main函数:

public class Main {
    public static void main(String[] args) {
        //创造根文件夹
        Root root1 = new Folder("C://");

        //建立子文件
        Root desktop = new Folder("桌面");
        Root myComputer = new Folder("我的电脑");
        //建立子文件
        Root javaFile = new File("HelloWorld.java");
        //建立文件夹关系
        root1.addFile(desktop);
        root1.addFile(myComputer);
        //建立文件关系
        myComputer.addFile(javaFile);
        //从0级开始展示,每下一级,多2条横线
        root1.display(0);
        //另外一个根
        Root root2 = new Folder("D://");
        root2.display(0);
    }
}

运行结果:

C://
--桌面
--我的电脑
----HelloWorld.java
D://

上一篇 下一篇

猜你喜欢

热点阅读