一、什么是组合模式
Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树。
二、组合模式的结构
三、组合模式的角色和职责
Component (树形结构的节点抽象)
- 为所有的对象定义统一的接口(公共属性,行为等的定义)
- 提供管理子节点对象的接口方法
- [可选]提供管理父节点对象的接口方法
Leaf (树形结构的叶节点)
Component的实现子类
Composite(树形结构的枝节点)
Component的实现子类
代码实现:
Component (树形结构的节点抽象类)
package com.qianyan.composite; import java.util.List; /** * 文件节点抽象(是文件和目录的父类) * @author hadoop * */ public interface IFile { /** * 显示文件或者文件夹名称 */ public void display(); /** * 添加 * @return */ public boolean add(IFile file); /** * 删除 * @return */ public boolean remove(IFile file); /** * 获取子节点 * @return */ public List<IFile> getChild(); }
Leaf (树形结构的叶节点类)
package com.qianyan.composite; import java.util.List; public class File implements IFile { private String name; public File(String name) { this.name = name; } @Override public void display() { System.out.println(name); } @Override public boolean add(IFile file) { return false; } @Override public boolean remove(IFile file) { return false; } @Override public List<IFile> getChild() { return null; } }
Composite(树形结构的枝节点类):
package com.qianyan.composite; import java.util.ArrayList; import java.util.List; public class Forder implements IFile { private String name; private List<IFile> children; public Forder(String name) { this.name = name; children = new ArrayList<IFile>(); } @Override public void display() { System.out.println(name); } @Override public boolean add(IFile file) { return children.add(file); } @Override public boolean remove(IFile file) { return children.remove(file); } @Override public List<IFile> getChild() { return children; } }
测试类:
package com.qianyan.composite; import java.util.List; public class MainClass { public static void main(String[] args) { //c盘 Forder root = new Forder("c:"); //qianyan目录 Forder qianyanForder = new Forder("qianyan"); //qianyan.txt文件 File qianyanFile = new File("qianyan.txt"); //qianyanChild目录 Forder qianyanChildForder = new Forder("qianyanChild"); //qianyanChild.txt文件 File qianyanChildFile = new File("qianyanChild.txt"); //添加qianyanChild目录到qianyan目录 qianyanForder.add(qianyanChildForder); //添加qianyanChild.txt文件到qianyan目录 qianyanForder.add(qianyanChildFile); //添加qianyanChild目录到c盘 root.add(qianyanForder); //添加qianyan.txt文件到c盘 root.add(qianyanFile); //显示文件目录结构 displayTree(root, 0); } public static void displayTree(IFile root, int deep) { for(int i = 0; i < deep; i++) System.out.print("--"); //显示自身的名称 root.display(); //获得子树 List<IFile> children = root.getChild(); //遍历子树 for(int i = 0; i < children.size(); i++) { IFile file = children.get(i); if(file instanceof File) { for(int j = 0; j <= deep; j++) System.out.print("--"); file.display(); } else displayTree(file, deep + 1); } } }
测试结果:
c: --qianyan ----qianyanChild ----qianyanChild.txt --qianyan.txt
作者:shaopeng5211 发表于2013-4-20 10:33:42 原文链接
阅读:26 评论:0 查看评论