`
futrueboy
  • 浏览: 84895 次
  • 性别: 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)是一种常用的结构型设计模式,主要用于构建具有层次结构的对象系统。它允许客户端以一致的方式处理单个对象和组合对象,简化了高层模块的调用。通过组合模式,可以将多个对象组织成...

    c++-设计模式之组合模式(Composite Pattern)

    组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,这种模式常用于需要处理树形结构的数据...

    组合模式(Composite Pattern)原理图

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

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

    **设计模式面面观:组合模式(Composite Pattern)** 组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,...

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

    迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)是设计模式中的两种重要结构型模式,它们在软件设计中有着广泛的应用。这两种模式都属于GoF(Gang of Four)设计模式,旨在解决特定的问题,提升代码...

    CompositePattern.rar

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体层次关系,使得客户端代码可以统一地处理单个对象和对象组合。在C++中,组合模式可以帮助我们构建灵活且易于操作的对象结构。 首先,组合模式...

    C++设计模式课件20_Composite_组合模式.pdf

    组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对单个对象和组合对象进行一致性的操作处理,即客户程序可以像操作单个对象...

    设计模式_组合模式.zip

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

    C++设计模式课件20_Composite_组合模式_Help!_designmodel_tenqqq_

    **组合模式(Composite Pattern)**是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得客户端可以统一地处理单个对象和对象的组合。在C++编程中,这种模式常用于简化对复杂对象结构的操作,...

    java常用设计模式-组合模式

    组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中,有两种基本类型的对象:叶...

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

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

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

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

    C#版 24种设计模式

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

    设计模式实验报告-组合模式.docx

    组合模式(Composite Pattern)是一种结构型设计模式,它允许用户将对象组合成树形结构来表示部分-整体层次结构。该模式使得用户对单个对象和组合对象的使用具有一致性。 #### 实验内容 实验内容主要包括设计和实现...

    [结构型模式] 组合模式的理解

    - `CompositePattern.cpp`文件则是这些类的实现,包括成员函数的具体代码,以及可能的测试用例来展示如何使用这个组合模式。 通过阅读这两个文件,我们可以更深入地理解如何在C++中实现组合模式,包括如何定义抽象...

    CompositePattern:设计模式之组合模式

    在组合模式中,有三个主要角色:Component(组件)、Leaf(叶子)和Composite(组合)。Component定义了公共接口,用于所有对象,无论它们是简单的还是复杂的。Leaf是组合中的终端元素,它不包含其他元素。Composite...

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

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

Global site tag (gtag.js) - Google Analytics