组合模式 | Composite Pattern
来源:互联网 发布:淘宝消保金 编辑:程序博客网 时间:2024/06/07 17:47
组合模式:
- 将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
角色:
- Component :是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。
- Leaf :在组合中表示叶子结点对象,叶子结点没有子结点。
3.Composite :定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除(remove)等。
适用性:
以下情况下适用Composite模式:
- 你想表示对象的部分-整体层次结构
- 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
有一个类 Employee,该类被当作组合模型类。CompositePatternDemo,我们的演示类使用 Employee 类来添加部门层次结构,并打印所有员工。
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 sal) { this.name = name; this.dept = dept; this.salary = sal; 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+" ]"); } }
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 salesExecutive1 = new Employee("Richard","Sales", 10000); Employee salesExecutive2 = new Employee("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); } } }}
总结:
组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以像处理简单元素一样来处理复杂元素。
如果你想要创建层次结构,并可以在其中以相同的方式对待所有元素,那么组合模式就是最理想的选择。本章使用了一个文件系统的例子来举例说明了组合模式的用途。在这个例子中,文件和目录都执行相同的接口,这是组合模式的关键。通过执行相同的接口,你就可以用相同的方式对待文件和目录,从而实现将文件或者目录储存为目录的子级元素。
阅读全文
0 0
- 组合模式-Composite Pattern
- Composite Pattern(组合模式)
- 【组合模式】Composite Pattern
- 组合模式 Composite Pattern
- 组合模式(Composite Pattern)
- 组合模式(Composite Pattern)
- 组合模式【Composite Pattern】
- 组合模式(Composite Pattern)
- composite pattern -- 组合模式
- 组合模式(Composite Pattern)
- 组合模式(Composite Pattern)
- Composite Pattern 组合模式
- 组合模式(Composite Pattern)
- 组合模式 (Composite Pattern)
- 组合模式【Composite Pattern】
- 组合模式【Composite Pattern】
- 组合模式 | Composite Pattern
- 组合模式(Composite Pattern)
- CSU 1775: 悲催的移寝 <贪心>
- nyoj 题目 心急的c小加 贪心算法
- 【css3】animation
- 如何快速转载CSDN中的博客
- 74HC138译码器
- 组合模式 | Composite Pattern
- Win10 64 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”
- SSH keys生成 & 简介
- 《重装系统时重启界面弹出对话框(计算机意外地重新启动或遇到错误,Windows安装无法继续……)》
- Nginx--官网中文翻译(中英文对比)--4-设置哈希Setting up hashes
- selenium中webdriver打开新页面无法获取页面元素
- kubernetes配置dns插件
- AI人工智能专业词汇集
- 一个demo学会c++编程