`
futrueboy
  • 浏览: 83710 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Composite Pattern(组合模式)

阅读更多

Composite Pattern(组合模式)

定义:

组合多个对象形成属性结构以表示整体-部分的结构层次,组合模式对单个对象和组合对象的使用具有一致性。

 

 

应用场景:

  1. 你想表示一个对象整体或部分层次。
  2. 你想让客户能够忽略不同对象的层次的变化。
  3. 对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。

 

实例:

 

 

结果输出:

My Computer
--C:\
----word2007.doc
----powerpoint2007.ppt
----windows
------system32
--------regedit.exe
--D:\
----xml2007.xml

 

 

代码分析:

1. 输出递归目录

/***********************************************************************
 * Module:  ClientApp.java
 * Author:  hongqin
 * Purpose: Defines the Class ClientApp
 ***********************************************************************/

import java.util.*;

public class ClientApp {

	/*
	 * print the tree
	 */
   public int print(File file, int level) {
	   print(level);
	   System.out.println(file.getFileName());
	   
	   if (file instanceof Directory) {
		   level ++;
		   Iterator<File> children = ((Directory)file).getIteratorFile();
		   File next;
		   while (children.hasNext())
		   {
			   next = children.next();
			   if (next instanceof Document) {
				   print(level);
				   System.out.println(next.getFileName());
			   } else {
				   print(next, level);
			   }
		   }
	   }
      return 0;
   }
   
   /*
    * print the symbols
    */
   public void print(int level) {
	   for (int i = 0; i < level; i++) {
		   System.out.print("--");
	   }
   }

}

2. 目录文件

/***********************************************************************
 * Module:  Directory.java
 * Author:  hongqin
 * Purpose: Defines the Class Directory
 ***********************************************************************/

import java.util.*;

public class Directory implements File {
	private String fileName;
	public List<File> fileList;

	// print file name
	public Directory(String string) {
		this.fileName = string;
	}

	public String getFileName() {
		return this.fileName;
	}

	/** @pdGenerated default getter */
	public List<File> getFile() {
		if (fileList == null)
			fileList = new ArrayList<File>();
		return fileList;
	}

	/** @pdGenerated default iterator getter */
	public Iterator<File> getIteratorFile() {
		if (fileList == null)
			fileList = new ArrayList<File>();
		return fileList.iterator();
	}

	/**
	 * @pdGenerated default setter
	 * @param newFile
	 */
	public void setFile(List<File> newFile) {
		removeAllFile();
		for (Iterator<File> iter = newFile.iterator(); iter.hasNext();)
			addFile((File) iter.next());
	}

	/**
	 * @pdGenerated default add
	 * @param newFile
	 */
	public void addFile(File newFile) {
		if (newFile == null)
			return;
		if (this.fileList == null)
			this.fileList = new ArrayList<File>();
		if (!this.fileList.contains(newFile))
			this.fileList.add(newFile);
	}

	/**
	 * @pdGenerated default remove
	 * @param oldFile
	 */
	public void removeFile(File oldFile) {
		if (oldFile == null)
			return;
		if (this.fileList != null)
			if (this.fileList.contains(oldFile))
				this.fileList.remove(oldFile);
	}

	/** @pdGenerated default removeAll */
	public void removeAllFile() {
		if (fileList != null)
			fileList.clear();
	}

}

3. 其他详见源代码包中

 

 

 

 

注:

  1. 定义以及应用场景出自《深入浅出设计模式》莫勇腾
  2. 使用软件:PowerDesigner12.5

  • 大小: 20.6 KB
  • 其他附件.rar (15.9 KB)
  • 描述: 主要是利用工具设计的UML图
  • 下载次数: 1
0
1
分享到:
评论

相关推荐

    组合模式 Composite Pattern

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...

    设计模式之组合模式(Composite Pattern)

    将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。

    组合模式(Composite Pattern)原理图

    组合模式(Composite Pattern)是一种对象结构型模式,其定义是将多个对象组合成树形结构以表示“整体-部分”关系的层次结构。它使得客户端对单个对象和组合对象的使用具有一致性。在组合模式中,对象被组织成树形...

    Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现

    Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现

    设计模式_组合模式.zip

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...

    设计模式面面观(11):组合模式(Composite Pattern)-结构型模式

    http://blog.csdn.net/fanweiwei/archive/2008/02/26/2121336.aspx

    .NET设计模式(11):组合模式(CompositePattern)

    [GOF《设计模式》]图1Composite模式结构图组合模式将对象组合成树形结构以表示"部分-整体"的层次结构。让用户一致地使用单个对象和组合对象。虽然例子抽象一些,但是算术表达式确实是组合的例子。算术表达式包括操作...

    c++设计模式-结构型模式-组合模式

    c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...

    C#版 24种设计模式

    备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) ...装饰模式(Decorator Pattern) 状态模式(State Pattern) 组合模式(Composite Pattern)

    CompositePattern.rar

    本资源是基于设计模式,通过C++语言实现组合模式。它实现虽然有些简单,但是主要是方便我们去了解组合模式思路。

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式

    33种JAVA设计模式DEMO

    组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任...

    用Java实现23种设计模式

    组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility...

    CompositePattern:设计模式之组合模式

    复合图案 设计模式之组合模式

    C#设计模式_设计模式_C#_

    组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器...

    设计模式PPT

     组合模式(Composite Pattern)  装饰者模式(Decorator Pattern)  外观模式(Facade Pattern)  享元模式(Flyweight Pattern)  代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样...

    C#设计模式(23种设计模式)

    组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代...

Global site tag (gtag.js) - Google Analytics