组合模式
来源:互联网 发布:淘宝客户管理系统 编辑:程序博客网 时间: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