首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏知了一笑

    Java描述设计模式(10):组合模式

    组合模式属于对象的结构模式,有时又叫做“部分——整体”模式组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。 二、组合模式-安全式 1、基础概念 安全式的组合模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。 在安全式的组合模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。 树叶构件(Leaf)角色 树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。 -透明式 1、概念图解 与安全式的组合模式不同的是,透明式的组合模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定接口。

    64910发布于 2019-09-03
  • 来自专栏大猫的Java笔记

    10.设计模式--组合模式(Composite模式)

    1.定义 组合模式是一种结构型模型,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 如此看来这种层次结构不就是我们说的组合模式要实现的内容吗? 相似的对象当成单一对象,部门和人员都具备组织树的特性即部门下可能是人员也有可能存在子部门信息。同时都具备基础信息,比如名字等。 2.组合模式结构图 OrganizationalStructure抽象类表示组织结构,他的子类包含了Department部门类以及Person人员类,部门中和人员中都有名字属性,同时部门有一个List 2.组合模式实现 OrganizationalStructure抽象类表示组织结构,其中由于部门和人员信息都属于组织结构具有相似,所以部门和人员信息都是他的子类。 /武将部 /武将部/张飞 /武将部/赵云 /武将部/黄忠 /武将部/马超 /武将部/关羽 /武将部/弓箭部 /武将部/弓箭部/小兵1 /武将部/弓箭部/小兵2 实际输出结果如下图2,组合模式实际上很适合用于做树结构的层级构建

    56420发布于 2021-11-11
  • 来自专栏AlbertYang的编程之路

    设计模式(10)-JavaScript如何实现组合模式???

    1 什么是组合模式 组合模式允许创建具有属性的对象,这些对象是原始项目或对象集合。集合中的每个项目本身可以容纳其他集合,创建深度嵌套结构。 树型控件是复合模式的一个完美例子。 组合模式用于简单化,一致化对单组件和复合组件的使用,其实它就是一棵树。 组合模式能对于工作能起到简化作用,组合对象实现某一操作时,通过递归,向下传递到所有的组成对象,在存在大批对象时,假如页面的包含许多拥有同样功能的对象,只需要操作组合对象即可达到目标。 在存在着某种的层次结构,并且其中的一部分要实现某些操作,即可使用组合模式组合模式中的所有节点都共享一组通用的属性和方法,它既支持单个对象,也支持对象集合。 不过组合模式的弱点也在于此,如果层次过多,则性能将受到影响。组合模式应用需要符合两个条件,一是产生递归,二是具有相同的动作。

    1.4K41发布于 2020-09-08
  • 来自专栏C++小白

    大话设计模式10-组合模式-2020-9-24

    1.组合模式简介 组合模式:将对象组合成树形结构来表示“部分-整体”的关系,组合模式使得单个对象和组合对象使用具有一致性。 代码实现如下: #include<exception> #include <iostream> #include<string> #include<list> using namespace std; //10 .组合模式:办公管理系统 class Component { public: Component(const string &istrName) :m_strName(istrName){}; virtual

    26020编辑于 2022-02-22
  • 来自专栏三流程序员的挣扎

    2022-10-06-迭代器和组合模式

    迭代器模式,遍历用,类似 Java 的 Iterator 接口,提供一种判断是否有下一个和取出下一个的方法。由于 Java 的集合基本已经实现了 Iterator,所以一般不需要自己手动实现。 组合模式,比如 Android 的 View 树就是这东西。 对于组合的迭代遍历,比如下面这样 组合模式.png 每个节点内部有个栈,存储迭代器列表,比如 ViewGroup 内部先是自己的迭代器,next 就读到了 ViewGroupA,判断 ViewGroupA 是个组合的话那就把它的迭代器再放到自己的栈里,这样 ViewGroup 再 next 读取的就是 ViewGroupA1,当 hasNext 时判断这迭代器没有 next 了,就是读完 ViewGroupA3 // 自定义的适用于组合的迭代器 public class CompositeIterator implements Iterator { Stack stack = new Stack();

    22730编辑于 2022-10-08
  • 来自专栏软件开发 -- 分享 互助 成长

    组合模式

    一、简介 1、组合模式将对象组合成树形结构以表示‘部分和整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 2、模式中的几个重要的类 Component:组合中的对象声明接口,在适当情况下,实现所有类共有接口的行为。 Leaf:叶节点对象,叶节点没有子节点。 4、所属类别:结构型 二、C++代码 1 // 组合模式.cpp : 定义控制台应用程序的入口点。 stdafx.h" 5 #include<iostream> 6 #include<string> 7 #include<vector> 8 using namespace std; 9 10

    93170发布于 2018-02-05
  • 来自专栏向治洪

    组合模式

    组合模式 组合模式(Composite Pattern)有时候又叫做部分-整体模式,允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 根据《设计模式》定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。 组合模式比较复杂,一般有以下用途:       1.你想表示对象的部分-整体层次结构   2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 要点 组合模式提供一个结构,可同时包含个别对象和组合对象。 组合模式允许客户对个别对象以及组合对象一视同仁。 组合结构内的任意对象成为组件,组件可以是组合,也可以是叶节点。 实现组合模式时,有许多设计上的折中。你要根据需要平衡透明性和安全性。

    88150发布于 2018-02-05
  • 来自专栏JS菌

    组合模式

    ⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅 组合模式在对象间形成树形结构; 组合模式中基本对象和组合对象被一致对待; 无须关心对象有多少层, 调用时只需在根部进行调用; 实现原理 创建宏任务并维护一个任务列表 // command2-1 // command2-2 // command2-3 应用 扫描文件夹 文件夹下面可以为另一个文件夹也可以为文件, 我们希望统一对待这些文件夹和文件, 这种情形适合使用组合模式

    78630发布于 2019-07-30
  • 来自专栏余林丰

    组合模式

    在之前有接触过组合模式,那是第一次接触设计模式,觉得什么是组合模式啊?什么部分与整体。现在再来看组合模式,觉得实际上并没有那么神秘。 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。 组合模式使得用户对单个对象和组合对象的使用具有一致性。这句话什么意思呢?凡是能类似树形结构的场景,均可使用组合模式来实现。对组合对象和单个对象抽象为一个公共类,这样就使得对它们的使用一致了。 组合模式的UML类图结构: image.png 任何复杂的代码其基本结构都是简单的,把简单的灵活应用组合起来就变得不简单。 rightBranch.add(leaf2); 28 29 root.display(); 30 } 31 32 } 现在我们就实现了一个最基本的组合模式 虽然这里我们实现了组合模式,也看懂了组合模式,但离真正应用还有一段路要走,我之所以想要学这些设计模式并且写出来,实际上是在为阅读开源代码做准备,阅读开源框架的代码是很好的学习方式。

    1.1K50发布于 2018-01-09
  • 来自专栏Czy‘s Blog

    组合模式

    组合模式 组合模式Composite Pattern又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象,通常依据树形结构来组合对象,用来表示部分以及整体层次,这种类型的设计模式属于结构型模式,它创建了对象组的树形结构 描述 在软件工程中,组合模式是一种分区设计模式组合模式描述了将以与对象的单个实例相同的方式对待一组对象,组合的目的是将对象组成树状结构,以表示整个部分的层次结构。 即将对象组合成树形结构以表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性,通常用于树形菜单、文件、文件夹、表单的管理等。 优点 高层模块调用简单。 节点自由增加。 忽略组合对象和单个对象的差别,对外一致接口使用。 缺点 树叶对象接口一致,无法区分,只有在运行时方可辨别。 包裹对象创建太多,额外增加内存负担。 在使用组合模式时,其叶子和树枝的声明都是实现类而不是接口,违反了依赖倒置原则。

    89932发布于 2020-10-10
  • 来自专栏JusterZhu

    组合模式

    本篇博文将会介绍一种结构型设计模式组合模式 (Composite Pattern),并演示如何在C#中实现它。 什么是组合模式组合模式是一种允许你将对象组合成树形结构以表示“部分-整体”的层次结构的设计模式。它使得客户对单个对象和复合对象的使用具有一致性。 组合模式适用场景 当你需要表示对象可能是其它对象的组合,以及希望以统一的方式处理所有对象时,就可以使用组合模式。例如,文件系统、图形用户界面(GUI)中的容器和项、HTML等都是组合模式的常见应用。 如何在C#中实现组合模式? 下面我们通过一个简单的例子来演示如何在C#中实现组合模式。假设我们正在实现一个公司的员工层级结构。 不过也要注意,如果你的系统并不需要处理这样的复杂结构,那么使用组合模式可能会引入不必要的复杂性。

    37420编辑于 2023-11-14
  • 来自专栏Howl同学的学习笔记

    组合模式

    暂时还没遇到需要这种设计模式的情景,笔者一般会把层次结构放到数据库里,用 parentId 来标识父子关系 1. 组合模式(Composite Pattern) 将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性 组合模式的组成: 抽象根节点(Component 改进 上面的案例中叶子节点也具有根节点的方法,这是不符合逻辑的,可以使用组合模式的安全模式,即改变抽象根节点的方法,而其余不变,这样的话根和叶子的责任就明显了 3.1 修改抽象根节点 public abstract

    63410编辑于 2022-05-09
  • 来自专栏JusterZhu

    组合模式

    本篇博文将会介绍一种结构型设计模式组合模式 (Composite Pattern),并演示如何在C#中实现它。 什么是组合模式组合模式是一种允许你将对象组合成树形结构以表示“部分-整体”的层次结构的设计模式。它使得客户对单个对象和复合对象的使用具有一致性。 组合模式适用场景 当你需要表示对象可能是其它对象的组合,以及希望以统一的方式处理所有对象时,就可以使用组合模式。例如,文件系统、图形用户界面(GUI)中的容器和项、HTML等都是组合模式的常见应用。 如何在C#中实现组合模式? 下面我们通过一个简单的例子来演示如何在C#中实现组合模式。假设我们正在实现一个公司的员工层级结构。 不过也要注意,如果你的系统并不需要处理这样的复杂结构,那么使用组合模式可能会引入不必要的复杂性。

    38220编辑于 2023-11-14
  • 来自专栏JMCui

    组合模式.

    一、概念 组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合组合包含组件。组件有两种:组合和叶节点元素。 为了要保持透明性,组合内所有的对象都必须实现这个接口,否则客户就必须操心哪个对象是用哪个接口,这就失去了组合模式的意义。 组合模式特别适用于树形结构,假设我们有了一个树形结构的菜单、子菜单和可能还带有菜单项的子菜单,那么任何一个菜单都是一种“组合”。 组合模式是违反单一职责原则的,这是一个典型的折衷案例。组合模式以单一责任设计原则换取换取透明性。什么是透明性?通过让组件的接口同时包含一些管理子节点和叶节点的操作,客户就可以将组合和叶节点一视同仁。 组合模式的优点:  1、组合模式让我们能用树形方式创建对象的结构,树里面包含了组合以及个别的对象(叶节点元素)。  2、使用组合结构,我们能把相同的操作应用在组合和个别对象(叶节点元素)上。

    1K40发布于 2019-01-03
  • 来自专栏java闲聊

    组合模式

    概述 UML类图 代码栗子 总结 概述 概念 组合模式是指将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 作用:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。 ? UML类图 ? Branch) s); } } return info; } } 总结 场景 当遇到想表示树形结构时(如菜单栏 等),优先考虑组合模式 缺点 安全性和透明性是互相矛盾的,这是由于叶子节点和非叶子节点行为的不一致以及需要提供一个一致的行为接口所造成的,是不可调和的矛盾 实际中,组合模式的大多数使用场景可以通过表设计进行规范解决 参考资料 书籍:《设计模式之禅》

    69820发布于 2019-03-20
  • 来自专栏mingmingcome’s cnblogs

    组合模式

    2019年5月23日21:50:31 组合模式(composite pattern) 定义 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。 组合模式使得用户对单个对象和组合对象的使用具有一致性。————《设计模式:可复用面向对象软件的基础》 组合模式是一个结构型模式。 角色 抽象组件角色(Component): 所有组件的抽象 声明在组合模式中的对象的接口 叶子角色(Leaf): 表示组合模式中的叶子对象 实现了Component 没有子节点 组合角色(Composite 组合模式就派上用场了。 总结 组合模式是将对象 组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 参考 《大话设计模式》 完 2019年7月18日20:09:21

    48720发布于 2021-11-29
  • 来自专栏优质文章

    设计模式---组合模式

    简述类型:结构型目的:将对象集合组合成树形结构,使客户端可以以一致的方式处理单个对象(叶子节点)和组合对象(根节点)话不多说,上优化案例。优化案例最初版v0不使用组合模式。 return this.dirs; } public List<File> getFiles() { return this.files; }}不使用组合模式组合模式啊!!! 修改版v1(透明组合模式)public interface Node { // 从File和Directory中抽象出Node类 boolean add(Node node); boolean continue; } print((Directory) node); // 增加强转 } }}其实透明组合模式和安全组合模式看着用就好了

    43220编辑于 2022-11-08
  • 来自专栏Liusy01

    【设计模式-组合模式

    【导读】讲究的是“部分-整体”的关系,比如文件与文件夹,文件夹包含了文件和子文件夹,如果需要做一个文件管理系统的话,此时就需要用到组合模式。类似与下图的结构: ? 一、定义 将对象组合成树形结构以表示“部分-整体”的层次结构,使用户对单个对象和组合对象具有一致的访问性。执行组合对象时如同执行起元素对象。 System.out.print(" "); } } abstractFile.print(); } } } 文件夹就相当于组合对象

    67210发布于 2020-09-01
  • 来自专栏程序员的园——原创文章

    设计模式——组合模式

    组合模式作为结构型模式的一种,主要用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合(Composite)模式使得用户对单个对象和组合对象的使用具有一致性。 思想 组合模式的核心思想是模块化并复用模块 模块化:通过定义清晰的接口,将复杂的系统分解为可重用的模块,便于维护和扩展。 易于扩展的体系结构:支持递归组合,适应不断变化的需求,便于软件的迭代升级。 总结 本文在说明组合模式是用于表征树形结构的“整体-部分”关系的基础上,通过两个人尽皆知的例子——文件系统和集团公司系统——阐释了组合模式的应用场景,并结合代码示例进行说明。 感谢您的关注、点赞、留言

    38110编辑于 2024-07-18
  • 来自专栏cwl_Java

    设计模式-组合模式

    组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。 1.优点 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码

    55510发布于 2019-10-26
领券