组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
public interface Component {
/**
* 功能描述:
* 〈添加〉
*
* @params : [c]
* @return : void
* @author : cwl
* @date : 2019/6/25 18:03
*/
void add(Component c);
/**
* 功能描述:
* 〈删除〉
*
* @params : [c]
* @return : void
* @author : cwl
* @date : 2019/6/25 18:03
*/
void remove(Component c);
/**
* 功能描述:
* 〈获取对单个〉
*
* @params : [i]
* @return : com.cwl.pattern.composite.Component
* @author : cwl
* @date : 2019/6/25 18:03
*/
Component getChild(int i);
/**
* 功能描述:
* 〈操作〉
*
* @params : []
* @return : void
* @author : cwl
* @date : 2019/6/25 18:03
*/
void operation();
}
public class Composite implements Component {
private ArrayList<Component> children=new ArrayList<Component>();
@Override
public void add(Component c) {
children.add(c);
}
@Override
public void remove(Component c) {
children.remove(c);
}
@Override
public Component getChild(int i) {
return children.get(i);
}
@Override
public void operation() {
for(Object obj:children) {
((Component)obj).operation();
}
}
}
public class Leaf implements Component {
private String name;
public Leaf(String name) {
this.name=name;
}
@Override
public void add(Component c){
}
@Override
public void remove(Component c){
}
@Override
public Component getChild(int i) {
return null;
}
@Override
public void operation() {
System.out.println("树叶"+name+":被访问!");
}
}
public class CompositePattern {
public static void main(String[] args) {
Component c0=new Composite();
Component c1=new Composite();
Component leaf1=new Leaf("1");
Component leaf2=new Leaf("2");
Component leaf3=new Leaf("3");
c0.add(leaf1);
c0.add(c1);
c1.add(leaf2);
c1.add(leaf3);
c0.operation();
}
}