意图:将对象组合成树型结构的层次,调用者在调用单个对象和组合对象具有一致性
公司抽象类
/**
* Created by shixin-pc on 2018/4/21.
* 公司的抽象类
*/
public abstract class Company {
private String name;
public Company(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void add(Company c);
public abstract void remote(Company c);
public abstract void show();//名字
public abstract void responsibility();//履新的职责
}
公司的具体实现类
/**
* Created by shixin-pc on 2018/4/21.
* 具体的公司类
*/
public class ConcreteCompany extends Company {
private List<Company> mCompany = new ArrayList<>();
public ConcreteCompany(String name) {
super(name);
}
@Override
public void add(Company c) {
mCompany.add(c);
}
@Override
public void remote(Company c) {
mCompany.remove(c);
}
@Override
public void show() {
for (int i = 0; i < mCompany.size(); i++) {
mCompany.get(i).show();
}
}
@Override
public void responsibility() {
for (int i = 0; i < mCompany.size(); i++) {
mCompany.get(i).responsibility();
}
}
}
HR部门
/**
* Created by shixin-pc on 2018/4/21.
* HR部门
*/
public class HRDepartment extends Company{
public HRDepartment(String name) {
super(name);
}
@Override
public void add(Company c) {
}
@Override
public void remote(Company c) {
}
@Override
public void show() {
Log.e("tag", getName());
}
@Override
public void responsibility() {
Log.e("tag", getName()+"职责是负责所有人事工作");
}
}
员工部门
/**
* Created by shixin-pc on 2018/4/21.
* 所有员工部门
*/
public class StaffDepartment extends Company{
public StaffDepartment(String name) {
super(name);
}
@Override
public void show() {
Log.e("tag",getName());
}
@Override
public void responsibility() {
Log.e("tag",getName()+"职责是所有公司任务");
}
@Override
public void add(Company c) {
}
@Override
public void remote(Company c) {
}
}
调用
/**
* 组合模式
* */
private void composite(){
Company company=new ConcreteCompany("成都纽糖总公司");
company.add(new HRDepartment("总公司人事部门"));
company.add(new StaffDepartment("总公司员工部门"));
Company company1=new ConcreteCompany("华北纽糖分公司");
company1.add(new HRDepartment("华北纽糖分公司人事部门"));
company1.add(new StaffDepartment("华北纽糖分公司员工部门"));
company.add(company1);
Company company2=new ConcreteCompany("华南纽糖科技");
company2.add(new HRDepartment("华南纽糖科技人事部门"));
company2.add(new StaffDepartment("华南纽糖科技员工部门"));
company.add(company2);
Company company3=new ConcreteCompany("西北纽糖科技");
company3.add(new HRDepartment("西北纽糖科技人事部门"));
company3.add(new StaffDepartment("西北纽糖科技员工部门"));
company.add(company3);
company.show();
company.responsibility();
}
