一、定义:
Compose objects into tree structures to represent part-whole hierarchies.Composite let clients treat individual objects and compositions of objects uniformly.
将物件组成/构成树状结构,用以表示“局部-全部”的阶层体系。Composite可以让client以一致的方式对待个别物件和合成物件。
二、使用:
常见例子:
File System:directory中有许多file;然而将file和directory一视同仁。
理解Composite,首先想到树形结构图。组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,将会遍历整个树结构。即对于个别物体和合成物体按照相同方式对待。
三、好处:
1.客户不再关心调用的是单个对象还是整体对象,简化了代码。
2.更容易在组合体中加入对象部件,而客户端不会因此而改变。
四、案例:
如下图所示:
详细代码如下:
public abstract class Entry { public abstract String getName(); public abstract int getSize(); public abstract void printList(String prefix); }
public class File extends Entry { private String name; private int size; public File(String name, int size) { this.name = name; this.size = size; } @Override public String getName() { // TODO Auto-generated method stub return name; } @Override public int getSize() { // TODO Auto-generated method stub return size; } @Override public void printList(String prefix) { // TODO Auto-generated method stub System.out.println(prefix + "/"+this); } }
import java.util.Iterator; import java.util.Vector; public class Directory extends Entry { private String name; private Vector<Entry> dir=new Vector<Entry>(); public Directory(String name) { this.name=name; } @Override public String getName() { // TODO Auto-generated method stub return name; } @Override public int getSize() { // TODO Auto-generated method stub int size=0; Iterator it=dir.iterator(); while(it.hasNext()) { Entry e=(Entry) it.next(); size+=e.getSize(); } return size; } @Override public void printList(String prefix) { // TODO Auto-generated method stub System.out.println(prefix + "/" + this); Iterator it=dir.iterator(); while(it.hasNext()) { Entry e=(Entry) it.next(); e.printList(prefix+"/"+name); } } public Entry add(Entry e) { // TODO Auto-generated method stub dir.add(e); return this; } }
原文:http://blog.csdn.net/fengzhongzhishenfu/article/details/23608779