组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
什么时候使用?
需求中是体现部分与整体层次的结构,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式了。
类图如下:
由于用的比较少,所以画的比较丑(呵呵)
现在使用java代码对组合模式进行解析:
定义Componet接口
public interface Componet
{
public void add(Componet componet);
public void remove(Componet componet);
public Componet getObject(int index);
public void operate();
}
定义Leaf 类
public class Leaf implements Componet
{
@Override
public void add(Componet componet)
{
// TODO Auto-generated method stub
}
@Override
public Componet getObject(int index)
{
// TODO Auto-generated method stub
return null;
}
@Override
public void operate()
{
// TODO Auto-generated method stub
System.out.println("叶子节点");
}
@Override
public void remove(Componet componet)
{
// TODO Auto-generated method stub
}
}
定义Composite类
public class Composite implements Componet
{
private ArrayList<Componet> coms=new ArrayList();
@Override
public void add(Componet componet)
{
// TODO Auto-generated method stub
coms.add(componet);
}
@Override
public Componet getObject(int index)
{
// TODO Auto-generated method stub
return coms.get(index);
}
@Override
public void operate()
{
// TODO Auto-generated method stub
for(Componet com:coms){
com.operate();
}
}
@Override
public void remove(Componet componet)
{
// TODO Auto-generated method stub
coms.remove(componet);
}
}
定义Client类
public class Client
{
public static void main(String[] args)
{
Leaf leaf1=new Leaf();
Leaf leaf2=new Leaf();
Composite com=new Composite();
com.add(leaf1);
com.add(leaf2);
Leaf leaf3=new Leaf();
Composite com2=new Composite();
com2.add(com);
com2.add(leaf3);
com2.operate();
}
}