



/**
-
@Author: cxh
-
@CreateTime: 18/1/18 22:28
-
@ProjectName: JavaBaseTest
*/
public class Client{
public static void main(String[] args) {
ConcreteCompany company=new ConcreteCompany("总公司");
FinanceDepartment financeDepartment=new FinanceDepartment("总公司财务部");
HRDepartment hrDepartment=new HRDepartment("总公司人力资源部");
company.add(financeDepartment);
company.add(hrDepartment);
//一级分公司
ConcreteCompany subCmp1=new ConcreteCompany("上海华东分公司");
FinanceDepartment financeDepartment1=new FinanceDepartment("上海华东分公司财务部");
HRDepartment hrDepartment1=new HRDepartment("上海华东分公司人力资源部");
subCmp1.add(financeDepartment1);
subCmp1.add(hrDepartment1);
company.add(subCmp1);
//二级分公司
ConcreteCompany subCmp2=new ConcreteCompany("南京办事处");
FinanceDepartment financeDepartment2=new FinanceDepartment("南京办事处财务部");
HRDepartment hrDepartment2=new HRDepartment("南京办事处人力资源部");
subCmp2.add(financeDepartment2);
subCmp2.add(hrDepartment2);
subCmp1.add(subCmp2);
//二级分公司
ConcreteCompany subCmp3=new ConcreteCompany("杭州办事处");
FinanceDepartment financeDepartment3=new FinanceDepartment("杭州办事处财务部");
HRDepartment hrDepartment3=new HRDepartment("杭州办事处人力资源部");
subCmp3.add(financeDepartment3);
subCmp3.add(hrDepartment3);
subCmp1.add(subCmp3);
//展示公司层级结构
System.out.println("公司层级结构如下:");
company.display(1);
//展示各个部门职责
System.out.println("各个部门职责如下:");
company.lineOfDuty();
}
}
/**
- @Author: cxh
- @CreateTime: 18/1/18 21:46
- @ProjectName: JavaBaseTest
*/
public abstract class Company {
private String name;
Company(){}
public Company(String name){
this.name=name;
}
//添加子公司
public abstract void add(Company company);
//移除子公司
public abstract void delete(Company company);
//输出公司层级结构
public abstract void display(int depth);
//输出当前部门or子公司的职责
public abstract void lineOfDuty();
}
import sourcecode.analysis.Consumer;
import java.util.ArrayList;
/**
-
@Author: cxh
-
@CreateTime: 18/1/18 22:11
-
@ProjectName: JavaBaseTest
*/
public class ConcreteCompany extends Company{
private String name;
public ConcreteCompany(String name){
this.name=name;
}
ArrayList filiale=new ArrayList<>();//下属子公司或部门
@Override
public void add(Company company) {
filiale.add(company);
}
@Override
public void delete(Company company) {
filiale.remove(company);
}
@Override
public void display(int depth) {
final int x=depth;
StringBuilder sb=new StringBuilder();
while (depth-->0)
sb.append("-");
Consumer consumer=s -> System.out.println(s);
consumer.accept(sb+name);
//子公司or部门显示
filiale.stream().forEach(company -> company.display(x+2));
}
@Override
public void lineOfDuty() {
filiale.stream().forEach(company -> company.lineOfDuty());
}
}
import sourcecode.analysis.Consumer;
/**
-
@Author: cxh
-
@CreateTime: 18/1/18 21:58
-
@ProjectName: JavaBaseTest
*/
public class FinanceDepartment extends Company {
private String name;
public FinanceDepartment(String name){
this.name=name;
}
@Override
public void add(Company company) {
}
@Override
public void delete(Company company) {
}
@Override
public void display(int depth) {
StringBuilder sb=new StringBuilder();
while (depth-->0)
sb.append("-");
Consumer consumer=s -> System.out.println(s);
consumer.accept(sb+name);
}
@Override
public void lineOfDuty() {
Consumer consumer=s -> System.out.println(s);
consumer.accept(name+"工作职责:公司财务管理");
}
}
import sourcecode.analysis.Consumer;
/**
-
@Author: cxh
-
@CreateTime: 18/1/18 21:50
-
@ProjectName: JavaBaseTest
*/
public class HRDepartment extends Company {
private String name;
public HRDepartment(String name){
this.name=name;
}
@Override
public void add(Company company) {
}
@Override
public void delete(Company company) {
}
@Override
public void display(int depth) {
StringBuilder sb=new StringBuilder();
while (depth-->0)
sb.append("-");
Consumer consumer=s -> System.out.println(s);
consumer.accept(sb+name);
}
@Override
public void lineOfDuty() {
Consumer consumer=s -> System.out.println(s);
consumer.accept(name+"工作职责:员工招聘培训管理");
}
}
输出:

(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|