java 组合模式 

eyes_on_you 2009-09-04 10:22:57
谁可以帮我解释一下这个组合模式啊 还有就是组合模式的具体应用场合啊
希望用比较形象的说法 小弟真的不懂啊

谢谢啦 

package edu.scit.composite;

import java.util.*;

public interface IFile {
public void printName();

public boolean addChild(IFile file);

public boolean removeChild(IFile file);

public List<IFile> getChildren();
}

//树形结构的叶子结点
class File implements IFile{
private String name;

public File(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}

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

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

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

}

//树形结构的枝节点
class Folder implements IFile {
private String name;
private List <IFile> childList;

public Folder(String name) {
this.name = name;
this.childList = new ArrayList<IFile>();
}
public void printName() {
System.out.println(name);
}

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

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

public List<IFile> getChildren() {
return childList;
}
}


class Client {
public static void main(String[] args) {

//构造一个树形的文件/目录结构
Folder rootFolder = new Folder("c:\\");
Folder compositeFolder = new Folder("composite");
rootFolder.addChild(compositeFolder);
Folder windowsFolder = new Folder("windows");
rootFolder.addChild(windowsFolder);
File file = new File("TestComposite.java");
compositeFolder.addChild(file);

//从rootFolder访问整个对象群
printTree(rootFolder);
}

private static void printTree(IFile ifile) {
ifile.printName();
List <IFile> children = ifile.getChildren();

for (IFile file:children) {
if (file instanceof File) {
System.out.print(" ");
file.printName();
} else if (file instanceof Folder) {
printTree(file);
}
}
}

}
...全文
127 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
prince2270 2009-09-04
  • 打赏
  • 举报
回复
使用组合模式的一个场合就是:类中使用不同的代码处理单一对象与多个对象。组合模式能够产生可以处理单一对象有可以处理多个对象的代码。简单的说,一组对象与一个对象的处理方法相同。举一个例子:

interface Shape{ void draw();}
class Circle implements Shape{
public void draw(){ System.out.println("cicle");}
}
class Retangle implements Shape{
public void draw(){ System.out.println("retangle");}
}
class MoreShape implements Shape{
private List<Shape> shapes;
public MoreShape(List<Shape> shapes){this.shapes = shapes;}
public void draw(){
for(Shape s : shapes)
s.draw();
}
}

在这里,对于Circle、Retangle和MoreShape的使用方法,无论是单一对象,还是多个对象,使用方法都是相同的。就是调用它的draw()方法。因为MoreShape也是Shape。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧