Composite Pattern(组合模式)
定义:
组合多个对象形成属性结构以表示整体-部分的结构层次,组合模式对单个对象和组合对象的使用具有一致性。
应用场景:
- 你想表示一个对象整体或部分层次。
- 你想让客户能够忽略不同对象的层次的变化。
- 对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。
实例:
结果输出:
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. 其他详见源代码包中
注:
-
定义以及应用场景出自《深入浅出设计模式》莫勇腾
-
使用软件:PowerDesigner12.5
- 大小: 20.6 KB
- 其他附件.rar (15.9 KB)
- 描述: 主要是利用工具设计的UML图
- 下载次数: 1
分享到:
相关推荐
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
组合模式(Composite Pattern)是一种对象结构型模式,其定义是将多个对象组合成树形结构以表示“整体-部分”关系的层次结构。它使得客户端对单个对象和组合对象的使用具有一致性。在组合模式中,对象被组织成树形...
Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
http://blog.csdn.net/fanweiwei/archive/2008/02/26/2121336.aspx
[GOF《设计模式》]图1Composite模式结构图组合模式将对象组合成树形结构以表示"部分-整体"的层次结构。让用户一致地使用单个对象和组合对象。虽然例子抽象一些,但是算术表达式确实是组合的例子。算术表达式包括操作...
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) ...装饰模式(Decorator Pattern) 状态模式(State Pattern) 组合模式(Composite Pattern)
本资源是基于设计模式,通过C++语言实现组合模式。它实现虽然有些简单,但是主要是方便我们去了解组合模式思路。
15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式
组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任...
组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility...
复合图案 设计模式之组合模式
组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器...
组合模式(Composite Pattern) 装饰者模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样...
组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代...