组合模式 小灰灰 2020-06-13 05:57 805阅读 0赞 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。 ### 介绍 ### **意图**:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 **主要解决**:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 **何时使用**: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 **如何解决**:树枝和叶子实现统一接口,树枝内部组合该接口。 **关键代码**:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。 **应用实例** :1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。 **优点** :1、高层模块调用简单。 2、节点自由增加。 **缺点**:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。 \*\*使用场景:\*\*部分、整体场景,如树形菜单,文件、文件夹的管理。 **注意事项**:定义时为具体类。 ### 实现 ### 我们有一个类 *Employee*,该类被当作组合模型类。*CompositePatternDemo*,我们的演示类使用 *Employee* 类来添加部门层次结构,并打印所有员工。 ![组合模式][format_png] #### 步骤 1 #### 创建 *Employee* 类,该类带有 *Employee* 对象的列表。 *Employee.java* 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; this.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; } @Override public String toString() { return ("Employee :[ Name : " + name + ", dept : " + dept + ", salary :" + salary + " ]"); } } #### 步骤 2 #### 使用 *Employee* 类来创建和打印员工的层次结构。 *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 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); } } } } #### 步骤 3 #### 验证输出。 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 ] [format_png]: /images/1592027805660.jpg
相关 组合模式 在我写外观模式的时候,我是举最近在做的一个考勤的例子,不熟悉的小伙伴可以去看一下前面的文章哦,在那个例子中我们分析了一下,考勤中每种类别员工的工作日计算方式是不一样的,比如说一 川长思鸟来/ 2022年05月09日 15:00/ 0 赞/ 230 阅读
相关 组合模式 组合模式 一、概述 1. 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组 合,使得用户在使用时可以一致性的对待容器和叶子。 2. 古城微笑少年丶/ 2022年04月18日 04:47/ 0 赞/ 210 阅读
相关 组合模式 > 本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》 1.定义 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个 朴灿烈づ我的快乐病毒、/ 2022年01月23日 00:21/ 0 赞/ 253 阅读
相关 组合模式 前言 组合模式(Composite),将对象组合树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 一、Compone 傷城~/ 2021年12月09日 00:49/ 0 赞/ 297 阅读
相关 组合模式 树形结构在软件中十分常见,如操作系统中的文件结构,文件夹包含文件和子文件夹,而子文件夹又包含文件和子子文件夹,像这样的结构称为树形结构。在树形结构中,文件夹或子文件夹称为容器( 清疚/ 2021年11月04日 16:10/ 0 赞/ 365 阅读
相关 组合模式 用途 -------------------- 组合模式 (Component) 将对象组合成 树形结构以表示“部分-整体”的层次结构。 组合模式使得用户对单个对象和 以你之姓@/ 2021年09月26日 15:50/ 0 赞/ 286 阅读
相关 组合模式 组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 透明方式:就是在component中声明所有用来管理子对 r囧r小猫/ 2021年09月17日 03:18/ 0 赞/ 430 阅读
相关 组合模式 11.组合模式 ![70][] //抽象构件,它是叶子和容器共同的父类,并且声明了叶子和容器的所有方法 abstract class Abstr 末蓝、/ 2021年09月16日 23:58/ 0 赞/ 369 阅读
相关 组合模式 一 概述 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nL 你的名字/ 2021年07月24日 17:14/ 0 赞/ 546 阅读
相关 组合模式 合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类... 小灰灰/ 2020年06月13日 05:57/ 0 赞/ 806 阅读
还没有评论,来说两句吧...