组合模式
Posted _Doing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合模式相关的知识,希望对你有一定的参考价值。
组合模式(Composite Pattern)
- 何时使用:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
- 如何解决:树枝和叶子实现统一接口,接口内部含有叶子属性和 List属性,List中组合该接口自身。
- 优点: 1、高层模块调用简单。 2、节点自由增加。
- 使用场景:部分、整体场景,如:1、树形菜单,文件、文件夹的管理。2、android中类View可以做为ViewGroup的一部分。组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。
例子:
Employee(单个叶子)中含有单个Employee的自身属性和一个List<Employee> subordinates(树枝/集合),单个对象Employee和组合对象List<Employee> subordinates的使用具有统一管理接口Employee
publicclassCompositePatternDemo{
publicstaticvoid main(String[] args){
Employee CEO =newEmployee("John","CEO",30000);
Employee headSales =newEmployee("Robert","Head Sales",20000);
Employee headMarketing =newEmployee("Michel","Head Marketing",20000);
Employee clerk1 =newEmployee("Laura","Marketing",10000);
Employee clerk2 =newEmployee("Bob","Marketing",10000);
Employee salesExecutive1 =newEmployee("Richard","Sales",10000);
Employee salesExecutive2 =newEmployee("Rob","Sales",10000);
CEO.add(headSales);
CEO.add(headMarketing);
headSales.add(salesExecutive1);
headSales.add(salesExecutive2);
headMarketing.add(clerk1);
headMarketing.add(clerk2);
//打印该组织的所有员工
System.out.println(CEO);
for(Employee headEmployee : CEO.getSubordinates()){
System.out.println(headEmployee);
for(Employee employee : headEmployee.getSubordinates()){
System.out.println(employee);
}
}
}
}
import java.util.ArrayList;
import java.util.List;
publicclassEmployee{
privateString name;
privateString dept;
privateint salary;
privateList<Employee> subordinates;
//构造函数
publicEmployee(String name,String dept,int sal){
this.name = name;
this.dept = dept;
this.salary = sal;
subordinates =newArrayList<Employee>();
}
publicvoid add(Employee e){
subordinates.add(e);
}
publicvoid remove(Employee e){
subordinates.remove(e);
}
publicList<Employee> getSubordinates(){
return subordinates;
}
publicString toString(){
return("Employee :[ Name : "+ name
+", dept : "+ dept +", salary :"
+ salary+" ]");
}
}
以上是关于组合模式的主要内容,如果未能解决你的问题,请参考以下文章