public abstract class Company {
protected String name;
public Company(String name){
this.name = name;
}
//增加
public abstract void add(Company c);
//删除
public abstract void delete(Company c);
//显示
public abstract void display(int depth);
//履行职责
public abstract void lineOfDuty();
}
3. 创建具体子类实现父类抽象类
1. 创建子类树枝节点
public class ConcreteCompany extends Company{
private List<Company> childrens = new ArrayList<>();
public ConcreteCompany(String name) {
super(name);
}
@Override
public void add(Company c) {
childrens.add(c);
}
@Override
public void delete(Company c) {
childrens.remove(c);
}
@Override
public void display(int depth) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < depth; i++) {
sb.append("-");
}
System.out.println(sb.toString()+name);
for (Company company: childrens) {
company.display(depth + 2);
}
}
@Override
public void lineOfDuty() {
for (Company company: childrens) {
company.lineOfDuty();
}
}
}
2. 创建子类树叶节点
public class FinanceDepartment extends Company {
public FinanceDepartment(String name) {
super(name);
}
@Override
public void add(Company c) {
}
@Override
public void delete(Company c) {
}
@Override
public void display(int depth) {
// System.out.println("-"+name);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < depth; i++) {
sb.append("-");
}
System.out.println(sb.toString()+name);
}
@Override
public void lineOfDuty() {
System.out.println(name+" 公司财务收支管理");
}
}
public class HRDepartment extends Company {
public HRDepartment(String name) {
super(name);
}
@Override
public void add(Company c) {
}
@Override
public void delete(Company c) {
}
@Override
public void display(int depth) {
// System.out.println("-"+name);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < depth; i++) {
sb.append("-");
}
System.out.println(sb.toString()+name);
}
@Override
public void lineOfDuty() {
System.out.println(name+" 新员工培训管理");
}
}
4. 测试类
@org.junit.Test
public void test(){
Company root = new ConcreteCompany("北京总公司");
root.add(new HRDepartment("总公司人力资源部"));
root.add(new FinanceDepartment("总公司财务部"));
Company comp = new ConcreteCompany("上海华东分公司");
comp.add(new HRDepartment("华东分公司人力资源部"));
comp.add(new FinanceDepartment("华东分公司财务部"));
root.add(comp);
Company comp1 = new ConcreteCompany("杭州办事处");
comp1.add(new HRDepartment("杭州办事处人力资源部"));
comp1.add(new FinanceDepartment("杭州办事处财务部"));
comp.add(comp1);
System.out.println("结构图");
root.display(1);
System.out.println();
System.out.println("履行职责");
root.lineOfDuty();
}