组合模式

来源:互联网 发布:淘宝客户管理系统 编辑:程序博客网 时间:2024/05/18 00:19

组合模式(结构型模式)

Composite模式也叫组合模式,通过递归手段构造树形结构,并可以通过一个对象来访问整个对象树

这里写图片描述

例子:定义一个IFile文件接口,方法display(),add(),remove(),getChild()。File类实现了IFile接口,实现了display方法,其他方法默认是没有效果的。
Folder类实现了IFile的所有方法,并且有个属性容器用来装他的子节点

IFile.java接口

public interface IFile {    void display();    boolean add(IFile ifile);    boolean remove(IFile ifile);    List<IFile> getChild();}

File.java
接口实现类

public interface IFile {    void display();    boolean add(IFile ifile);    boolean remove(IFile ifile);    List<IFile> getChild();}

Folder.java
接口实现类

public class Folder implements IFile {    private String name;    private List<IFile> children;    public Folder(String name) {        this.name = name;        children = new ArrayList<IFile>();    }    @Override    public void display() {        System.out.println(name);    }    @Override    public boolean add(IFile ifile) {        boolean result = children.add(ifile);        return result;    }    @Override    public boolean remove(IFile ifile) {        boolean result = children.remove(ifile);        return result;    }    @Override    public List<IFile> getChild() {        return children;    }}

Test.java
测试类

public class Test {    public static void main(String[] args) {        Folder E = new Folder("E");        File file = new File("zcw.txt");        Folder movie = new Folder("movie");        File m = new File("一条狗的使命.mp4");        movie.add(m);        E.add(file);        E.add(movie);        displayTree(E, 0);    }    public static void displayTree(IFile file, int deep) {        for (int i = 0; i < deep; i++) {            System.out.print("--");        }        file.display();        List<IFile> children = file.getChild();        for (IFile item : children) {            //文件夹            if (item instanceof Folder) {                displayTree(item, ++deep);            } else {                for (int i = 0; i < deep + 1; i++) {                    System.out.print("--");                }                item.display();            }        }    }}

结果

E--zcw.txt--movie----一条狗的使命.mp4
原创粉丝点击