背景
地球联邦军是目前我方最大的组织,覆盖全球。旗下还有北美、南美、亚洲等联邦军,亚洲联邦军下又有教导队,我们的主角响介就是在教导队。用组合模式表示他们的树形结构如下。
实现
组织组件:可表示组织或成员
/**
* 组织组件抽象类
*/
public abstract class OrgComponent {
public void add(OrgComponent menuComponent) {
throw new UnsupportedOperationException();
}
public void remove(OrgComponent menuComponent) {
throw new UnsupportedOperationException();
}
public String getName() {
throw new UnsupportedOperationException();
}
public String getDesc() {
throw new UnsupportedOperationException();
}
public void print() {
throw new UnsupportedOperationException();
}
}
组织
/**
* 组织
*/
public class Org extends OrgComponent {
private String name;
private String desc;
private List<OrgComponent> orgs = new ArrayList<>();
public Org(String name, String desc) {
super();
this.name = name;
this.desc = desc;
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public List<OrgComponent> getOrgs() {
return orgs;
}
public void setOrgs(List<OrgComponent> orgs) {
this.orgs = orgs;
}
@Override
public void add(OrgComponent menuComponent) {
orgs.add(menuComponent);
}
@Override
public void remove(OrgComponent menuComponent) {
orgs.remove(menuComponent);
}
@Override
public String toString() {
return "Org [name=" + name + ", desc=" + desc + "]";
}
@Override
public void print() {
System.out.println("Org [name=" + name + ", desc=" + desc + "]");
for (OrgComponent component : orgs) {
component.print();
}
}
}
成员
/**
* 组织下的成员
*/
public class Member extends OrgComponent {
private String name;
private String desc;
public Member(String name, String desc) {
super();
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "Member [name=" + name + ", desc=" + desc + "]";
}
@Override
public void print() {
System.out.println("Member [name=" + name + ", desc=" + desc + "]");
}
}
测试
public class Test {
public static void main(String[] args) {
Org org = new Org("地球联邦军", "我方代表正义的一支军队");
org.add(new Org("北美联邦军", "北美的联邦驻军"));
org.add(new Org("欧洲联邦军", "欧洲的联邦驻军"));
Org asianOrg = new Org("亚洲联邦军", "亚洲的联邦驻军");
Org trainOrg = new Org("教导队", "伊豆最强的一直作战队,我们的主角响介也是在这里。");
trainOrg.add(new Member("响介", "主角兼队长"));
trainOrg.add(new Member("艾克塞林", "队员"));
trainOrg.add(new Member("开", "指挥官"));
trainOrg.add(new Member("曾加", "训练官"));
asianOrg.add(trainOrg);
org.add(asianOrg);
org.print();
}
}
测试结果
Org [name=地球联邦军, desc=我方代表正义的一支军队]
Org [name=北美联邦军, desc=北美的联邦驻军]
Org [name=欧洲联邦军, desc=欧洲的联邦驻军]
Org [name=亚洲联邦军, desc=亚洲的联邦驻军]
Org [name=教导队, desc=伊豆最强的一直作战队,我们的主角响介也是在这里。]
Member [name=响介, desc=主角兼队长]
Member [name=艾克塞林, desc=队员]
Member [name=开, desc=指挥官]
Member [name=曾加, desc=训练官]
总结
组合模式常用在树形结构,好像没什么好说的~~