设计模式---组合模式

组合模式又叫树模式,是一个应用比较广泛的设计模式,

数据结构中我们学过树这一个概念,组合模式类似于树的概念,枝干代表整体,树叶和分支代表部分。

组合模式通常应用在表示二叉树,多叉树等树形结构的数据集合。

我们通过一个简单的window目录来简讲解组合模式

组合模式的元素:

1.Component (抽象构建角色)是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component。

2.Leaf (树叶节点角色)在组合中表示叶子结点对象,叶子结点没有子结点。

3.Composite (树枝构建角色)定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除。

Component

/**
 * 
 */
package com.model.composite;

import java.util.List;

/**
 *************************************************************** 
 * 项目名称:DescignModel
 * 程序名称:Root
 * 日期:2012-9-5 下午02:14:00
 * 作者:
 * 模块:
 * 描述:抽象角色
 * 备注:
 * ------------------------------------------------------------
 * 修改历史
 * 序号  				日期        		修改人       修改原因
 * 
 * 修改备注:
 * @version 
 ***************************************************************
 */
public interface Root {
	
	public boolean addFile(Root file);
	
	public boolean removeFile(Root flie);
	
	public List<Root> getFile();
	
	public void display();
}

Leaf

/**
 * 
 */
package com.model.composite;

import java.util.List;

/**
 *************************************************************** 
 * 项目名称:DescignModel
 * 程序名称:File
 * 日期:2012-9-5 下午02:17:51
 * 作者:
 * 模块:
 * 描述:叶子角色
 * 备注:
 * ------------------------------------------------------------
 * 修改历史
 * 序号  				日期        		修改人       修改原因
 * 
 * 修改备注:
 * @version 
 ***************************************************************
 */
public class File implements Root {
	
	private String name;
	
	public File(String name){
		this.name = name;
	}
	
	/* (non-Javadoc)
	 * @see com.model.composite.Root#addFile(com.model.composite.Root)
	 */
	@Override
	public boolean addFile(Root file) {
		//本身就是文件无法添加
		return false;
	}

	/* (non-Javadoc)
	 * @see com.model.composite.Root#removeFile(com.model.composite.Root)
	 */
	@Override
	public boolean removeFile(Root flie) {
		//同上方法只有在文件夹对象才实现
		return false;
	}

	/* (non-Javadoc)
	 * @see com.model.composite.Root#getFile()
	 */
	@Override
	public List<Root> getFile() {
		
		return null;
	}

	/* (non-Javadoc)
	 * @see com.model.composite.Root#display()
	 */
	@Override
	public void display() {
		System.out.println("    |_____"+this.name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

Composite


/**
 * 
 */
package com.model.composite;

import java.util.ArrayList;
import java.util.List;

/**
 *************************************************************** 
 * 项目名称:DescignModel 程序名称:Folder 日期:2012-9-5 下午02:21:55 作者: 模块: 描述:枝干接点 备注:
 * ------------------------------------------------------------ 修改历史 序号 日期 修改人
 * 修改原因
 * 
 * 修改备注:
 * 
 * @version
 *************************************************************** 
 */
public class Folder implements Root {
	private String name;
	private List<Root> folderNode;

	public Folder(String name) {
		this.name = name;
		folderNode = new ArrayList<Root>();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.model.composite.Root#addFile(com.model.composite.Root)
	 */
	@Override
	public boolean addFile(Root file) {
		try {
			folderNode.add(file);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.model.composite.Root#removeFile(com.model.composite.Root)
	 */
	@Override
	public boolean removeFile(Root flie) {
		try {
			folderNode.remove(flie);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.model.composite.Root#getFile()
	 */
	@Override
	public List<Root> getFile() {
		return folderNode;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.model.composite.Root#display()
	 */
	@Override
	public void display() {
		System.out.println(name);
		for (Root f : folderNode) {
			if (f instanceof Folder) {
				System.out.print("|__");
			}
			f.display();
		}
	}

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值