动机:由于有些对象容器复杂的内部实现结构,在维护过程中时常会引起变化,违反开闭原则
class Node{
public process(){}
}
class TreeNode extends Node{
List<Node> node;
@Override
public process(){
//1 process当前节点
//doSomething
//2 process子节点
for(Node temp:node){
temp.process();
}
}
}
class Leaf extends Node{
@Override
public process(){
//doSomething
}
}
void invoke(Node n){
//doSomething
n.process();
//doSomething
}
}
class Test{
public static void main(String args[]){
Node a=new TreeNode("root");
Node b=new Node("left");
Node c=new Node("right");
a.add(b);
a.add(c);
invoke(a);
}
}
将对象组合成树形结构,让不同的对象自己持有自己的变化并封装,从而解耦合