组合模式

设计模式-组合模式

╄→гoц情女王★ 提交于 2020-04-07 07:50:07
组合模式(Composite Pattern)也叫合成模式,有时又叫做部分-整体模式(Part-Whole), 主要是用来描述部分与整体的关系: 定义: Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly.(将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。) 举个最常见的例子,公司组织架构就是一个典型的树状结构(网上截取图): image.png 我们一般会这样设计组织架构,看代码实现 首先根节点IROOT /** * 根节点 * @author shuliangzhao * @Title: IRoot * @ProjectName design-parent * @Description: TODO * @date 2019/6/18 22:37 */ public interface IRoot { //得到总经理的信息 public String getInfo(); //总经理下边要有小兵,那要能增加小兵,比如研发部总经理,这是个树枝节点 public void

设计模式之组合模式(Composite)详解及代码示例

女生的网名这么多〃 提交于 2020-03-31 05:58:18
一、组合模式的定义   组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。   聚合与组合都是表示整体和个体的关联关系,他们之间最大的区别在于子类被父类控制的程度。组合的父子类关系比聚合要强: 聚合:has-a关系,父类包含子类,子类可以独立于父类存在   Class ==> Student:班级和学生是一种聚合关系。一个班级,可以有学生,也可以没学生;反过来,当把班级解散,学生仍然存在;同时学生可以归属于多个班级(兴趣班、课外班)。 组合:part-of关系,父类拥有子类,子类不能独立于父类存在   Body ⇒ Cell:身体与细胞是一个组合关系。但我们创建一个身体,细胞随之被创建;反过来,当我们销毁一个身体,细胞随之被销毁。 二、组合模式优缺点   组合模式的主要优点有: 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;   其主要缺点是: 设计较复杂,客户端需要花更多时间理清类之间的层次关系; 不容易限制容器中的构件;

【GOF23设计模式】组合模式

倾然丶 夕夏残阳落幕 提交于 2020-03-25 06:32:45
来源: http://www.bjsxt.com/ 一、【GOF23设计模式】_组合模式、树状结构、杀毒软件架构、JUnite底层架构、常见开发场景 1 package com.test.composite; 2 /** 3 * 抽象组件 4 */ 5 public interface Component { 6 void operation(); 7 } 8 9 //叶子组件 10 interface Leaf extends Component{ 11 } 12 //容器组件 13 interface Composite extends Component{ 14 void add(Component c); 15 void remove(Component c); 16 Component getChild(int index); 17 } 1 package com.test.composite; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** 7 * 抽象组件构建 8 */ 9 public interface AbstractFile { 10 void killVirus();//杀毒 11 } 12 13 //叶子组件 14 class ImageFile implements

结构型模式--组合模式

こ雲淡風輕ζ 提交于 2020-03-13 09:35:16
组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似得对象当作一个单一得对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。它创建了对象组的树形结构。 介绍 意图: 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决: 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 如何解决: 树枝和叶子实现统一接口,树枝内部组合该接口。 关键代码: 树枝内部组合该接口,并且含有内部属性 List,里面放 Component。 应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。 优点: 1、高层模块调用简单。 2、节点自由增加。 缺点: 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。 使用场景: 部分、整体场景

设计模式六大原则(转载

烈酒焚心 提交于 2020-03-12 19:38:19
1 六大原则 详情参考: 设计模式六大原则(转载 )。 2 UML类之间关系有几种?聚合和组合区别?   类之间可能存在以下几种关系: 关联 (association)、 依赖 (dependency)、 聚合 (Aggregation,也有的称聚集)、 组合 (Composition)、 泛化 (generalization,也有的称继承)、 实现 (Realization)。    关联 是指两个类之间存在某种特定的对应关系,例如客户和订单,一个订单只能属于某个客户,一个客户可能会有多张订单。根据方向,分为单向和双向。根据对应的数量分为一对一、一对多、多对多等。对应的UML图如下所示: class Customer { private Integer id; private String name; private Set<Order> orders; public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } } class Order { private Integer id; private float money; private Customer customer; public Customer

组合模式

眉间皱痕 提交于 2020-03-10 22:15:03
也称为整体-部分模式, 通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示 作用: 使客户端对单个对象和组合对象保持一致的方式处理。属于结构型模式 使用场景: 1、希望客户端可以忽略组合对象与单个对象的差异时 2、对象层次具备整体和部分, 呈树形结构(如树形菜单, 操作系统目录结构, 公司组织架构等) public abstract class CourseComponent { public void addChild (CourseComponent catalogComponent) { throw new UnsupportedOperationException( " 不支持添加操作 " ) ; } public void removeChild (CourseComponent catalogComponent) { throw new UnsupportedOperationException( " 不支持删除操作 " ) ; } public String getName (CourseComponent catalogComponent) { throw new UnsupportedOperationException( " 不支持获取名称操作 " ) ; } public double getPrice (CourseComponent

23种设计模式(10)- 组合模式

拟墨画扇 提交于 2020-03-10 08:38:00
介绍 组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕. 组合模式可以优化处理递归或分级数据结构.有许多关于分级数据结构的例子,使得组合模式非常有用武之地. 类图 组成部分: Component: 为参加组合的对象声明一个公共接口, 不管是组合还是叶结点. Leaf: 在组合中表示叶子结点对象,叶子结点没有子结点. Composite: 表示参加组合的有子对象的对象, 并给出树枝购件的行为. 实例 FolderComponent public abstract class FolderComponent { private String name; public String getName() { return name; } public void setName(final String name) { this.name = name; } public FolderComponent() { } public FolderComponent(final String name) { this.name = name; } public abstract void add(FolderComponent component); public

组合模式

≡放荡痞女 提交于 2020-03-09 22:17:30
模式动机 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用) 由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂。 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象,这就是组合模式的模式动机。 模式定义 组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。 组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。 模式结构 组合模式包含如下角色: • Component : 抽象构件 • Leaf : 叶子构件 • Composite : 容器构件 • Client : 客户类 模式分析 组合模式的关键是定义了一个抽象构件类,它既可以代表叶子,又可以代表容器,而客户端针对该抽象构件类进行编程,无须知道它到底表示的是叶子还是容器

组合模式(Composite Pattern) ------------结构型模式

我怕爱的太早我们不能终老 提交于 2020-03-09 20:41:51
组合模式使用面向对象的思想来实现树形结构的处理和构件,描述了如何将容器对象和叶子对象进行递归组合,实现简单,灵活性好。 组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体——部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体——部分”(Part-While)模式,它是一种对象结构型模式。 组合模式的关键是定义了一个抽象构件类,它既可以代表叶子,也可以代表容器,而客户端针对该抽象构建类进行编程,无须知道它到底表示的是叶子还是容器,可以对其进行统一处理。同时容器对象与抽象构件类之间还建立了一个聚合关联关系,在容器对象中既可以包含叶子,也可以包含容器,以此实现递归组合,形成一个树形结构。 组合结构模式中的3个角色。 (1)Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。 (2)Leaf(叶子构件):它在组合模式中结构中表示叶子节点对象。叶子节点没有子节点,它实现了在抽象构件中定义的行为。 (3)Composite(容器构件):它在组合模式结构中表示容器节点对象。容器节点包含子节点,其子节点可以是叶子节点,也可以是容器节点,它提供一个集合用于存储子节点,实现了在抽象构件中定义的行为

设计模式笔记13:组合模式(Composite Pattern)

房东的猫 提交于 2020-03-09 20:36:28
一、组合模式的内容 组合模式允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合。 组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。 组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。 组合模式以单一责任设计原则换取透明性。通过让组件的接口同时包含一些管理子节点和叶节点的操作,客户就可以将组合和叶节点一视同仁。也就是说,一个元素是组合还是叶节点,对客户是透明的。 二、组合模式模式要点 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用) 由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂。 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象,这就是组合模式的模式动机。