1 简介
组合模式(Composite Pattern)定义:将对象组合成树形结构,以表示“部分—整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
2 代码
(1)抽象构建(Component)
public abstract class Component {
String info;
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract Component getChild(int i);
public abstract void operation(int level);
}
(2)叶子构件(Leaf)
public class Leaf extends Component{
Leaf(String info){
this.info=info;
}
@Override
public void add(Component c) {
throw new UnsupportedOperationException("Error:can't add a child to a leaf");
}
@Override
public void remove(Component c) {
throw new UnsupportedOperationException("Error:can't remove a child from a leaf");
}
@Override
public Component getChild(int i) {
throw new UnsupportedOperationException("Error:leaf has no child");
}
@Override
public void operation(int level) {
for(int i=0;i<level;i++)
System.out.print(" ");
System.out.println(info);
}
}
(3)容器构件(Composite)
import java.util.ArrayList;
public class Composite extends Component{
private ArrayList<Component> list=new ArrayList<Component>();
Composite(String info){
this.info=info;
}
@Override
public void add(Component c) {
list.add(c);
}
@Override
public void remove(Component c) {
list.remove(c);
}
@Override
public Component getChild(int i) {
return list.get(i);
}
@Override
public void operation(int level) {
for(int i=0;i<level;i++)
System.out.print(" ");
System.out.println(info);
for(Component c:list) {
c.operation(level+1);
}
}
}
(4) 客户端(Client)
public class Client {
public static void main(String[] args) {
Component University=new Composite("清华大学");
Leaf ministry=new Leaf("行政部");
Composite computer=new Composite("计算机学院");
Composite management=new Composite("管理学院");
University.add(ministry);
University.add(computer);
University.add(management);
Leaf softwareEngineering=new Leaf("软件工程");
Leaf computerTechnology=new Leaf("计算机技术");
computer.add(softwareEngineering);
computer.add(computerTechnology);
Leaf informationManagement=new Leaf("信息管理");
Leaf businessAdministration=new Leaf("工商管理");
management.add(informationManagement);
management.add(businessAdministration);
University.operation(0);
}
}
运行结果:
清华大学
行政部
计算机学院
软件工程
计算机技术
管理学院
信息管理
工商管理