设计模式学习笔记--组合模式
2016-11-25 10:14
465 查看
九、组合模式
组合模式(Composite Pattern),又称部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用以表示部分及整体层次。介绍
将对象组合成树形结构以表示”部分-整体”层次结构,使用户对单一对象和组合对象的使用具有一致性。常用于单一和组合对象树形结构的表示,或者给予用户一致性体验的场景。
比如:复杂的算术表达式,内嵌算术表达式,可以视作部分与整体的例证。
- 优点:高层代码调用简单、节点自由增加。
- 缺点:使用组合模式时,其
叶子和
树枝的声明都是实现类,而非接口,违反了依赖倒置原则。
实现
定义一个实体类Employee用作组合模型类。
CompositePatternDemo用于演示使用
Employee类添加部门层次结构,并输出所有员工。
- 创建实体类
Employee.java
import java.util.ArrayList; import java.util.List; public class Employee { private String name; private String dept; private int salary; private List<Employee> subordinates; //构造函数 public Employee(String name,String dept,int salary){ this.name = name; this.dept = dept; this.salary = salary; subordinates = new ArrayList<Employee>(); } public void add(Employee e){ subordinates.add(e); } public void remove(Employee e){ subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; } public String toString(){ return ("Employee : [ Name : " + name + ", dept : " + dept + ",salary : "+ salary + " ]"); } }
演示
CompositePatternDemo.java
public class CompositePatternDemo { public static void main(String[] args){ Employee CEO = new Employee("John","CEO",30000); Employee headSales = new Employee("Robert","Head Sales",20000); Employee headMarketing = new Employee("Michel","Head Marketing",20000); Employee clerk1 = new Employee("Laura","Marketing",10000); Employee clerk2 = new Employee("Bob","Marketing",10000); Employee salesExe1 = new Employee("Richard","Sales",10000); Employee salesExe2 = new Employee("Rob","Sales",10000); CEO.add(headSales); CEO.add(headMarketing); headSales.add(salesExe1); headSales.add(salesExe2); 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); } } } }
输出
Employee :[ Name : John, dept : CEO, salary :30000 ] Employee :[ Name : Robert, dept : Head Sales, salary :20000 ] Employee :[ Name : Richard, dept : Sales, salary :10000 ] Employee :[ Name : Rob, dept : Sales, salary :10000 ] Employee :[ Name : Michel, dept : Head Marketing, salary :20000 ] Employee :[ Name : Laura, dept : Marketing, salary :10000 ] Employee :[ Name : Bob, dept : Marketing, salary :10000 ]
相关文章推荐
- 设计模式学习笔记-组合模式
- java 设计模式学习笔记八 composite组合模式
- 设计模式学习笔记---组合模式composite(Java版)
- 设计模式学习笔记十七:组合模式(Composite Pattern)
- 设计模式学习笔记二十四:优雅的菜单 - 组合模式
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 《Head First 设计模式》学习笔记:迭代器模式与组合模式
- 设计模式学习笔记——组合模式
- 设计模式学习笔记Composite组合模式
- 设计模式学习笔记之组合模式模式
- 设计模式学习笔记:组合模式
- C#面向对象设计模式学习笔记(8) - Composite 组合模式(结构型模式)
- 设计模式学习笔记之组合模式
- android设计模式学习笔记02--组合模式
- java 设计模式 学习笔记(15) 组合模式
- 设计模式学习笔记——组合模式
- 设计模式学习笔记-组合模式(转载)
- 设计模式学习笔记(组合模式)
- 设计模式之禅学习笔记--组合模式
- 设计模式学习笔记之组合模式