对设计模式—Composite模式的认识
Composite模式定义:
将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
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(); }}