Java设计模式之十四(组合模式)
来源:互联网 发布:怎么在ubuntu上安装qq 编辑:程序博客网 时间:2024/05/29 03:56
一、什么是组合模式
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;}@Overridepublic void display() {System.out.println(name);}@Overridepublic boolean add(IFile file) {return false;}@Overridepublic boolean remove(IFile file) {return false;}@Overridepublic 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>();}@Overridepublic void display() {System.out.println(name);}@Overridepublic boolean add(IFile file) {return children.add(file);}@Overridepublic boolean remove(IFile file) {return children.remove(file);}@Overridepublic 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();}elsedisplayTree(file, deep + 1);}}}
测试结果:
c:--qianyan----qianyanChild----qianyanChild.txt--qianyan.txt
- Java设计模式之十四(组合模式)
- Java设计模式之二十四(命令模式)
- (十四)Java设计模式之不变模式
- (二十四)Java设计模式之解释器模式
- java设计模式之组合设计模式
- Java设计设计模式之组合模式(Composition)
- 设计模式笔记(十四) —— 组合模式
- 大话设计模式学习(十四)——组合模式
- 设计模式系列(十四)组合模式(Composite Pattern)
- PHP设计模式系列(十四):组合模式
- java设计模式之组合模式
- java设计模式之组合模式Composite
- JAVA设计模式之组合模式
- java设计模式之组合模式
- 设计模式之组合模式java实现
- java设计模式之组合模式
- 【Java设计模式】之组合模式
- Java设计模式之组合模式
- 使用JQuery.js & JQuery.form.js 插件完成对StrutsAction的异步请求,返回JSON数据
- 1113 正/负数统计
- 开发者应该了解的 12 款 Eclipse 插件
- SQL Server默认值中的所有字段的列出
- Type Casting
- Java设计模式之十四(组合模式)
- 最长公共上升子序列(LCIS)的O(n^2)算法
- 1114 计算营业额
- Jquery优化效率 提升性能解决方案
- hdu 2164 (简单。石头剪刀布)
- Solaris 10下安装Qt 4
- eclipse中两个插件之间的互相调用
- 项目4
- 一个优秀的人的标志和特点 ---俞敏洪公司内部讲话