组合模式:
定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
优点:1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。
举例:像数据结构里面的树,想要对每个叶子节点都进行操作的话,用这个模式就比较的好.
下面我举例代码:
定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
优点:1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。
举例:像数据结构里面的树,想要对每个叶子节点都进行操作的话,用这个模式就比较的好.
下面我举例代码:
package com.mode.composite;
public interface Composite {
void update();
void add(Composite composite) throws Exception;
}
package com.mode.composite;
import java.util.ArrayList;
import java.util.List;
public class Branch implements Composite{
List<Composite> compositeList = new ArrayList<Composite>();
@Override
public void update() {
for(Composite com:compositeList){
com.update();
}
}
@Override
public void add(Composite composite) {
compositeList.add(composite);
}
}
package com.mode.composite;
public class Leaf implements Composite{
@Override
public void update() {
System.out.println("Leaf.update()"+this);
}
@Override
public void add(Composite composite)throws Exception {
throw new Exception("叶子节点不能再添加");
}
}
package com.mode.composite;
public class Client {
public static void main(String[] args) throws Exception {
Composite root = new Branch();
Composite branch = new Branch();
root.add(new Leaf());
root.add(new Leaf());
root.add(branch);
branch.add(new Leaf());
branch.add(new Leaf());
root.update();
}
}