Composite模式定义:
将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
Composite好处:
1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码
如一棵树有树枝和叶子,树枝也有叶子,叶子为最小的部分.从大到小顺序Tree->Limb->Leaf
将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
Composite好处:
1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码
如一棵树有树枝和叶子,树枝也有叶子,叶子为最小的部分.从大到小顺序Tree->Limb->Leaf
public abstract class Component
{
public String name;
public ArrayList<Component> list;
public Boolean Add(Component item)
{
return false;
}
public Boolean Remove(Component item)
{
return false;
}
public abstract void print();
public abstract void Operation();
}
public class CompositeComponent extends Component
{
public CompositeComponent()
{
list = new ArrayList<Component>();
}
@Override
public void Operation()
{
for (Component item : list)
{
item.print();
item.Operation();
}
}
public Boolean Add(Component item)
{
list.add(item);
return true;
}
public Boolean Remove(Component item)
{
int i = list.indexOf(item);
if (i > 0)
{
list.remove(i);
}
return true;
}
public void print()
{
System.out.println("This is Root");
}
}
public class LimbCoponent extends CompositeComponent
{
public void print()
{
System.out.println(name);
}
}
public class Leaf extends Component
{
@Override
public void print()
{
System.out.println(name);
}
public void Operation()
{
System.out.println("Defoliation on wings");
}
}
public class TestComposite
{
public static void main(String[] args)
{
Component tree = new CompositeComponent();
Component leaf = new Leaf();
Component limb = new LimbCoponent();
limb.name = "This is an limb";
leaf.name = "This is an leaf";
limb.Add(leaf);
tree.Add(limb);
tree.Operation();
}
}