意图:将对象组合成树型结构的层次,调用者在调用单个对象和组合对象具有一致性
公司抽象类
/**
* 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();
}