- 定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
- 简言之:就是将数据组装成树结构
package design.Combination;
import java.util.ArrayList;
public abstract class FamilyMember {
private String name;
private FamilyMember parent;
public FamilyMember(String name) {
this.name = name;
}
public void getInfo() {
System.out.println(this.name);
}
public void setParent(FamilyMember parent) {
this.parent = parent;
parent.addChildren(this);
}
public void addParent(FamilyMember parent) {
this.parent = parent;
}
public FamilyMember getParent() {
return parent;
}
public abstract ArrayList<FamilyMember> getChildren();
public abstract void setChildren(FamilyMember member);
public abstract void addChildren(FamilyMember member);
}
class Parents extends FamilyMember {
private ArrayList<FamilyMember> children = new ArrayList();
public Parents(String name) {
super(name);
}
@Override
public void setChildren(FamilyMember member) {
member.addParent(this);
this.children.add(member);
}
@Override
public void addChildren(FamilyMember member) {
this.children.add(member);
}
@Override
public ArrayList<FamilyMember> getChildren() {
return children;
}
}
class Children extends FamilyMember {
public Children(String name) {
super(name);
}
@Override
@Deprecated
public ArrayList<FamilyMember> getChildren() {
return null;
}
@Override
@Deprecated
public void setChildren(FamilyMember member) {
}
@Override
@Deprecated
public void addChildren(FamilyMember member) {
}
}
class Test {
public static void main(String[] args) {
FamilyMember father = new Parents("爸爸");
Parents grandF = new Parents("爷爷");
Children child = new Children("孩子");
father.setParent(grandF);
father.setChildren(child);
printInfo(grandF);
father.getParent().getInfo();
}
public static void printInfo(FamilyMember member) {
for (FamilyMember children : member.getChildren()) {
if (children instanceof Children) {
children.getInfo();
} else {
children.getInfo();
printInfo(children);
}
}
}
}
输出:
爸爸
孩子
爷爷