package ding.study.designpatterns.composite; /** * 公司类抽象啊 * @author daniel * */ public 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 i); //展示部门职能 public abstract void lineOfDuty(); }
package ding.study.designpatterns.composite; import java.util.ArrayList; import java.util.List; /** * 公司实现类 * @author daniel * */ public class CompanyImpl extends Company { //公司或者部门抽象 private List <Company> children=new ArrayList<Company>(); public CompanyImpl(String name){ super(name); } @Override public void add(Company c) { children.add(c); } @Override public void display(int i) { StringBuffer sb=new StringBuffer(); for(int j=0;j<i;j++){ sb.append("-"); } System.out.println(sb.toString()+this.name); for(Company company :children){ company.display(i+2); } } @Override public void lineOfDuty() { for(Company company:children){ company.lineOfDuty(); } } @Override public void remove(Company c) { children.remove(c); }}
package ding.study.designpatterns.composite; /** * 财务 部门类 * @author daniel * */ public class FinanceDepartment extends Company { public FinanceDepartment (String name){ super(name); } @Override public void add(Company c) { // TODO Auto-generated method stub } @Override public void display(int i) { StringBuffer sb=new StringBuffer(); for(int j=0;j<i;j++){ sb.append("-"); } System.out.println(sb.toString()+this.name); } @Override public void lineOfDuty() { // TODO Auto-generated method stub System.out.println(this.name+" 公司财务收支管理"); } @Override public void remove(Company c) { // TODO Auto-generated method stub } }
package ding.study.designpatterns.composite; /** * HR部门类 * @author daniel * */ public class HRDepartment extends Company { public HRDepartment (String name){ super(name); } @Override public void add(Company c) { // TODO Auto-generated method stub } @Override public void display(int i) { StringBuffer sb=new StringBuffer(); for(int j=0;j<i;j++){ sb.append("-"); } System.out.println(sb.toString()+this.name); } @Override public void lineOfDuty() { // TODO Auto-generated method stub System.out.println(this.name+" 员工管理培训"); } @Override public void remove(Company c) { // TODO Auto-generated method stub } }
package ding.study.designpatterns.composite; public class ZTestMain { /** * @author daniel * @time 2016-5-27 下午12:41:27 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub CompanyImpl zong=new CompanyImpl("总公司"); zong.add(new HRDepartment("总公司HR")); zong.add(new FinanceDepartment("总公司财务")); CompanyImpl bj=new CompanyImpl("bj公司"); bj.add(new HRDepartment("bj公司HR")); bj.add(new FinanceDepartment("bj公司财务")); CompanyImpl sh=new CompanyImpl("sh公司"); sh.add(new HRDepartment("sh公司HR")); sh.add(new FinanceDepartment("sh公司财务")); zong.add(bj); zong.add(sh); System.out.println("-----------公司结构-------------"); zong.display(1); System.out.println("-----------部门职能-------------"); zong.lineOfDuty(); } }
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/composite