Composite
一、定义:
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;
}
}