设计模式04-组合设计模式(component)
2014-06-16 21:25
190 查看
组合模式(Composite)属于结构性模式,它描述了对象间的组合关系。
对象间常常通过树结构来组织(包含)起来,以实现整体-部分的层次结构。整体上可以看做是一个组合对象。
抛却各种复杂的术语,组合模式的特点是:
对象通过实现(继承)统一的接口(抽象类),调用者对单一对象和组合对象的操作具有一致性。
组合模式很常见,Java的容器类(比如ArrayList)都实现了组合模式。
我们平常操作最多的文件(夹)就是组合模式的最好例子。文件系统是树形层次结构,并且文件和文件夹提供给用户的一些操作是相同的,比如复制。于是,可以通过一个统一的接口将文件和文件夹统一起来,对用户提供一致的操作,屏蔽不同的复制实现过程。我们在复制文件夹的时候,操作系统实现了对文件夹内的所有文件和文件夹的复制,即实现了组合对象的整体复制,而不是一个空的文件夹;这和我们复制单个文件的体验是一致的。这便是组合模式的妙处。
完整的模拟代码如下:
package com.csufox.Composite;
import java.util.ArrayList;
interface Node{
public void copy(); //定义统一的接口:复制
}
class Folder implements Node{
private String
folderName;
private ArrayList
nodeList =new ArrayList(); //用于存储文件夹下的文件夹或文件的信息
public Folder(String
folderName){
this.folderName
= folderName;
}
public void add(Node
node){ //增加文件或文件夹
nodeList.add(node);
}
// @overwrite
public void copy(){ //文件夹复制操作实现递归
System.out.println("复制文件夹:" +
folderName);
for(int i=0;i<(Node)nodeList.size();i++)
{
Node node = (Node)nodeList.get(i);
node.copy();
}
}
}
class File implements Node{
private String
fileName;
public File(String
fileName){
this.fileName
= fileName;
}
public void copy(){
System.out.println("复制文件:" +
fileName);
}
}
public class Composite{
public static void main(String[]
args){
Folder document = new Folder("我的资料"); //我的资料文件夹
File book = new File("Java编程思想.pdf"); //文档文件
Folder music = new Folder("我的音乐"); //我的音乐文件夹
File music1 = new File("你是我的眼.mp3"); //音乐文件1
File music2 = new File("Without
You.mp3"); //音乐文件2
//确定树形结构关系
document.add(book);
document.add(music);
music.add(music1);
music.add(music2);
document.copy(); //复制“我的资料”文件夹,递归地复制了其下所有文件夹和文件。
}
}
运行结果如下:
复制文件夹:我的资料
复制文件:Java编程思想.pdf
复制文件夹:我的音乐
复制文件:你是我的眼.mp3
复制文件:Without You.mp3
由以上的代码和运行结果可知:
通过实现组合模式,用户对文件夹的操作与对普通文件的操作并无差异。用户完全不用关心这是文件夹还是文件,也不用关心文件夹内部的具体结构,就可以完成相关操作。
同样的道理,我们可以表达如下:
通过实现组合模式,调用者对组合对象的操作与对单一对象的操作具有一致性。调用者不用关心这是组合对象还是文件,也不用关心组合对象内部的具体结构,就可以调用相关方法,实现功能。
仔细分析copy()方法的代码,我们会发现,如果从面向过程的角度思考,组合模式通过递归原理实现了树结构(组合对象)的深度优先遍历。
相关文章推荐
- C语言和设计模式(之组合模式)04
- Android 最常用的设计模式二 安卓源码分析——组合模式(component)
- 设计模式--迭代器与组合模式Iterator&Component
- 设计模式-组合模式(Component)
- <Head First 设计模式>:组合模式:Component
- 设计模式之组合模式,component
- Java设计模式:组合模式 Component
- 设计模式深入学习---Component组合模式(结构型模式)
- 设计模式与泡mm的关系之Composite组合模式及组合模式的再思考
- .NET实用设计模式:组合模式(Composite)
- 设计模式之Composite(组合)
- 敏捷思维-架构设计中的方法学(7)组合使用模式
- 设计模式之Composite组合设计模式
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- c#设计模式之组合模式(composition pattern)
- 设计模式 --- 组合模式(Composite) 精选经验合集
- 设计模式----Composite(组合)模式
- GoF 23个经典的设计模式04--创建模式之原型模式(未完代续)
- 窥视设计模式之组合模式(composite)