package 组合模式;
import java.util.*;
abstract class Company{//公司抽象类
protected String name;
public Company(String name){
this.name=name;
}
public abstract void Add(Company c);//增加
public abstract void Remove(Company c);//移除
public abstract void Display(int depth);//显示
public abstract void Duty();//职责
}
class HRDepartment extends Company{//人力资源部
public HRDepartment(String name){
super(name);
}
public void Add(Company c){}
public void Remove(Company c){}
public void Display(int depth){//显示
String strtemp=new String();
for(int i=0;i<depth;i++){
strtemp+="-";
}
System.out.println(strtemp+name);
}
public void Duty(){//人力资源部的职责
System.out.println(name+" 员工招聘培训管理");
}
}
class FNDepartment extends Company{//财务部
public FNDepartment(String name){
super(name);
}
public void Add(Company c){}
public void Remove(Company c){}
public void Display(int depth){//显示
String strtemp=new String();
for(int i=0;i<depth;i++){
strtemp+="-";
}
System.out.println(strtemp+name);
}
public void Duty(){//财政部的职责
System.out.println(name+" 公司财务收支管理");
}
}
class ConcreteCompany extends Company{//具体公司
private List <Company> children=new ArrayList<Company>();//ArrayList集合类
public ConcreteCompany(String name){
super(name);
}
public void Add(Company c){//增加
children.add(c);
}
public void Remove(Company c){//移除
children.remove(c);
}
public void Display(int depth){//显示
String strtemp=new String();
for(int i=0;i<depth;i++){
strtemp+="-";
}
System.out.println(strtemp+name);
for(Company component:children){
component.Display(depth+2);
}
}
public void Duty(){//公司各个部分的职责
for(Company componnet:children){
componnet.Duty();
}
}
}
public class TestClass {
public static void main(String[] args){
ConcreteCompany root=new ConcreteCompany("北京总公司");
root.Add(new HRDepartment("总公司人力资源部"));
root.Add(new FNDepartment("总公司 财务部"));
ConcreteCompany comp=new ConcreteCompany("上海华东分公司");
comp.Add(new HRDepartment("华东分公司人力资源部") );
comp.Add(new FNDepartment("华东分公司财务部") );
ConcreteCompany comp1=new ConcreteCompany("南京办事处");
comp1.Add(new HRDepartment("南京办事处人力资源部") );
comp1.Add(new FNDepartment("南京办事处财务部") );
comp.Add(comp1);
ConcreteCompany comp2=new ConcreteCompany("杭州处办事处");
comp2.Add(new HRDepartment("杭州办事处人力资源部") );
comp2.Add(new FNDepartment("杭州办事处财务部") ); comp.Add(comp2);
root.Add(comp);
System.out.println("/n结构图:");
root.Display(1);//显示
System.out.println("/n职责:");
root.Duty();//履行职责
}
}