组合模式
来源:互联网 发布:初识seo ppt 编辑:程序博客网 时间:2024/06/05 18:12
组合模式
又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
在组合模式中含有叶节点和枝节点。
组合模式的结构图
一个典型的OA系统各个分公司也同样需要一个公司的组织结构。
public abstract class Company {
protected Stringname;
public Company (Stringname) {
this.name =name;
}
public abstract void add(Company company);
public abstract void remove(Company company);
publicabstract void display(intdepth);
publicabstract void liveOfDuty();
}
叶子节点 财务部门public class FinanceDepartmentextends Company{
public FinanceDepartment(Stringnaem) {
super(naem);
}
@Override
public void display(int depth) {
System.out.println(depth+":"+name);
}
@Override
public void add(Company company) {
}
@Override
public void remove(Company company) {
}
@Override
public void liveOfDuty() {
System.out.println(name +":履行职责");
}
}
人力资源部门public class HRDepartmentextends Company{
List<Company> components =new ArrayList<Company>();
public HRDepartment(Stringname) {
super(name);
}
@Override
public void add(Company company) {
}
@Override
public void remove(Company company) {
}
@Override
public void display(int depth) {
System.out.println(depth+name );
}
@Override
public void liveOfDuty() {
System.out.println(name+" : "+"负责人才招聘");
}
}
树枝节点public class ConcreteCompanyextends Company{
List<Company> compontents =new ArrayList<Company>();
public ConcreteCompany(Stringname) {
super(name);
}
@Override
public void add(Company company) {
compontents.add(company);
}
@Override
public void remove(Company company) {
compontents.remove(company);
}
@Override
public void display(int depth) {
System.out.println(depth+" :: "+name);
depth++;
for(Companycompany : compontents) {
company.display(depth);
}
}
@Override
public void liveOfDuty() {
for(Companycompany : compontents) {
company.liveOfDuty();
}
}
}
Client调用使用者public class CompasitePatternDemo {
public static void main(String[] args) {
// ConcreteCompany headerquarter = new ConcreteCompany("北京总公司");
// headerquarter.add(new HRDepartment("北京总公司人力资源部"));
// headerquarter.add(new FinanceDepartment("北京总公司财务部"));
ConcreteCompany filiale = new ConcreteCompany("广东东莞分公司");
filiale.add(new HRDepartment("广东东莞分公司人力资源部"));
filiale.add(new FinanceDepartment("广东东莞分公司财务部"));
// headerquarter.add(filiale);
ConcreteCompany wanjiangAgency = new ConcreteCompany("万江办事处");
wanjiangAgency.add(new HRDepartment("万江办事处人力资源部"));
wanjiangAgency.add(new FinanceDepartment("万江办事处财务部"));
filiale.add(wanjiangAgency);
ConcreteCompany fuchengAgency = new ConcreteCompany("附城办事处");
fuchengAgency.add(new HRDepartment("附城办事处人力资源部"));
fuchengAgency.add(new FinanceDepartment("附城办事处财务部"));
filiale.add(fuchengAgency);
System.out.println("结构图\n");
// headerquarter.display(0);
filiale.display(1);
System.out.println("\n职责");
// headerquarter.liveOfDuty();
filiale.liveOfDuty();
}
}
输出结果结构图
1 :: 广东东莞分公司
2广东东莞分公司人力资源部
2:广东东莞分公司财务部
2 :: 万江办事处
3万江办事处人力资源部
3:万江办事处财务部
2 :: 附城办事处
3附城办事处人力资源部
3:附城办事处财务部
职责
广东东莞分公司人力资源部 : 负责人才招聘
广东东莞分公司财务部:履行职责
万江办事处人力资源部 : 负责人才招聘
万江办事处财务部:履行职责
附城办事处人力资源部 : 负责人才招聘
附城办事处财务部:履行职责
组合模式是一个解决部分与整体关系的设计模式,形成一个树形结构,在父节点和子节点可以使用同样的功能。父节点和子节点可以有同样的结构以及功能。
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- Spring Boot CLI
- apache 反向代理,负载均衡配置。
- 【STL】容器 > 关联式容器 > map
- 堆和栈以及数组的增长方向
- Django class-based view的QuerySet三个层次以及函数调用路线图
- 组合模式
- JQuery与Thymeleaf整合:[[${someObject.someValue}]]
- python反序列化的2种方法
- 【Android】[Problem]-"Waiting for target device to come online".
- SVM-支持向量机算法概述
- spring-boot系列之初识spring-boot
- UNIX环境高级编程习题——第七章
- Rhel 7.3 基本操作
- CentOS7 Solr6.6.0 单机部署