`
dengwenwei121
  • 浏览: 36118 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

组合模式

 
阅读更多

一、什么是组合模式

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

二、组合模式的结构

三、组合模式的角色和职责

Component 树形结构的节点抽象)

- 为所有的对象定义统一的接口(公共属性,行为等的定义)

- 提供管理子节点对象的接口方法

- [可选]提供管理父节点对象的接口方法

Leaf (树形结构的叶节点)

Component的实现子类

Composite(树形结构的枝节点)

Component的实现子类

package com.dw.test;

import java.util.List;

/*Component (树形结构的节点抽象)
- 为所有的对象定义统一的接口(公共属性,行为等的定义)
- 提供管理子节点对象的接口方法
- [可选]提供管理父节点对象的接口方法*/
/**
 * 文件节点的抽象(是文件和目录的父类)
 * @author Administrator
 *
 */
public interface IFile {
   //显示文件或者文件夹的名称
   public void display();
   //添加文件或者文件夹
   public boolean add(IFile file);
   //删除文件或者文件夹
   public boolean remove(IFile file);
   //获得子节点
   public List<IFile> getChild();
}

package com.dw.test;

import java.util.List;

/*Leaf (树形结构的叶节点)
Component的实现子类*/
public class File implements IFile {
	private String name;
	public File(String name){
		this.name=name;
	}
	//显示文件的名称
	public void display() {
		System.out.println(name);
	}

	public boolean add(IFile file) {
		return false;
	}

	public boolean remove(IFile file) {
		return false;
	}

	public List<IFile> getChild() {
		return null;
	}

}

package com.dw.test;

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


/*Composite(树形结构的枝节点)
Component的实现子类*/
public class Folder implements IFile {
	private String name;
	private List<IFile> children;

	public Folder(String name) {
      this.name=name;
      children=new ArrayList<IFile>();
	}
    /**
     * 显示文件夹的名称
     */
	public void display() {
          System.out.println(name);
	}

	public boolean add(IFile file) {
		return children.add(file);
	}

	public boolean remove(IFile file) {
		return children.remove(file);
	}

	public List<IFile> getChild() {
		return children;
	}

}

package com.dw.test;

import java.util.List;
/*一、什么是组合模式
Composite模式也叫组合模式,是构造型的设
计模式之一。通过递归手段来构造树形的对象结
构,并可以通过一个对象来访问整个对象树。
*/
public class MainClass {
    public static void main(String[] args) {
		IFile rootFolder=new Folder("d:");
		Folder folder=new Folder("dawei");
		File file=new File("dawei.text");
		rootFolder.add(folder);
		rootFolder.add(file);	
		folder.add(new Folder("你好"));
		folder.add(new File("nihao.text"));
		displayTree(rootFolder,0);
	}
    //递归文件
    public static void displayTree(IFile rootFolder,int deep)
    {
    	for (int i = 0; i < deep; i++) {
			System.out.print("--");
		}
    	//显示自身的名称
    	rootFolder.display();
    	//获取子树
    	List<IFile> children=rootFolder.getChild();
    	//遍历子树
    	for (IFile iFile : children) {
			if (iFile instanceof File) {
				for (int i = 0; i < deep; i++) {
					System.out.print("--");
				}
			   iFile.display();	
			}
			else
			{
				displayTree(iFile,deep+1);
			}
		}
    }
}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics