首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式之组合模式Composite 模式)引入composite模式composite模式的具体实例composite模式小结

引入composite模式 composite模式的实例 composite模式的分析 小结 引入composite模式 在计算机文件系统中,有文件夹的概念,文件夹里面既可以放入文件也可以放入文件夹...这就引出了我们本文所要讨论的composite模式,也就是组合模式,组合模式就是用于创造出这样的容器结构的。是容器和内容具有一致性,可以进行递归操作。...image.png composite模式 composite模式主要有一下几类角色 leaf 树叶 表示内容的角色,该角色中不能放入其他对象,对应我们实例程序中的file Composite 复合物...小结 在实例程序中,我们以文件夹的结构实现了composite模式,实际上现实世界中,到处都存在composite模式,例如,视窗系统中,窗口可以含有子窗口也可以含有button类似的控件。...通常来说,树结构的数据结构都适合composite模式

77020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    组合模式Composite

    定义 将对象组合成树形结构以表示”部分-整体”的层次结构,Composite模式使得用户对单个对象和组合对象的使用具有一致性。 2....为组合的对象声明接口 在某些情况下实现从此接口派生出的所有类共有的默认行为 定义一个接口可以访问及管理它的多个子部件 Leaf(叶部件) 在组合中表示叶节点对象,叶节点没有子节点 定义组合中接口对象的行为 Composite...("服装"); Component c1 = new Composite("男装"); Component c2 = new Composite("女装"); /...研磨设计模式 商品的类别树: +服装 +男装 -衬衣 -夹克 +女装 -裙子...—>组合模式 组合模式Composite)的关键就在于这个父抽象类,这个抽象类既可以代表叶子对象,也可以代表组合对象,这样用户在操作的时候,对单个对象和组合对象的使用就具有一致性。

    42420

    Java组合模式(Composite)

    组合模式(Composite) 使用组合模式的场景:   把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象....组合模式核心: 抽象构件(Component)角色: 定义了叶子和容器构件的共同点 叶子(Leaf)构件角色:无子节点 容器(Composite)构件角色: 有容器特征,可以包含子节点 结构类图 ?...组合模式工作流程分析: 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子。...name; } @Override public void operiation() { System.out.println("视频文件:"+name+" 处理操作"); } } Composite...容器 /** * Composite容器组件 * @author 波波烤鸭 * @email dengpbs@163.com * */ public class Folder implements

    72720

    设计模式之——组合模式 Composite Pattern

    组合模式 组合模式也叫合成模式,有事又叫做部分-整体模式,主要是用来描述整体和部分之间的关系。 组合模式的通用类图: ?...root = new Composite(); root.doSomething(); //创建一个树枝构件 Composite branch = new Composite();...)c); } } } } 我们发现在环境类中直接使用 Composite root = new Composite(); 这个了,违反了依赖倒置原则。...其实组合模式是有两种实现的,分别是 透明模式 和 安全模式 ,我们上面用到的是安全模式,那么透明模式是怎么样的?...我们与安全模式对比一下就非常清楚了,透明模式是把所有的方法都放在抽象类中,这样的话对于树叶节点来说是不安全的,因为在运行期间会遇到问题。

    51220

    设计模式日记——Composite

    组合(Composite模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系。...组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; 模式结构 顶层抽象:树枝或者树叶的抽象接口 树枝:是组合中的叶节点对象,它没有子节点...它实现了抽象构件角色中声明的接口,它的主要作用是存储和管理子部件 源码导读 组合模式分为透明模式和安全模式;透明模式是在顶层抽象中声明了所有管理子对象的方法,树叶节点点和树枝节点对于客户端来说没有区别。...对组合模式来说,List Set等这些集合类属于不那么严格的组合模式。...由于没有找到太好的源码,因此我在这里分别对透明模式和安全模式组合说明 透明模式: public abstract class Component{ private String name;

    20420

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

    1.定义 组合模式是一种结构型模型,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。...这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 上回说到刘备被设计入赘江东后,通过诸葛孔明的锦囊妙计成功化险为夷。回到荆州后刘备一心想匡扶汉室,于是准备继续招兵买马。...2.组合模式实现 OrganizationalStructure抽象类表示组织结构,其中由于部门和人员信息都属于组织结构具有相似,所以部门和人员信息都是他的子类。...Department是部门类,其中部门可以包含部门信息以及部门中的人员或下级部门扮演Composite(复合物角色),同时提供了获取部门名称的方法、在部门中增加人员信息以及下级部门信息、根据指定前缀打印部门信息以及部门下级部门和人员信息...参考文献《图解设计模式》 代码获取地址:https://gitee.com/bughong/design-pattern

    43520

    「聊设计模式」之组合模式Composite

    而组合模式Composite)就是一种处理树形数据结构的模式。   组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。...Composite(组合构件):定义组合中的枝干节点行为,用于存储子部件,在 Component 接口中实现与子部件有关的操作。   ...我们先定义一个抽象的文件系统节点 Component: package com.example.javaDesignPattern.composite; /** * @author bug菌 *...然后定义叶子节点 File: package com.example.javaDesignPattern.composite; /** * @author bug菌 * @version 1.0...我们可以使用如下方式测试程序: package com.example.javaDesignPattern.composite; /** * @author bug菌 * @version 1.0

    32652

    十三、组合模式 ( Composite Pattern )

    组合模式Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象 组合模式依据树形结构来组合对象,用来表示部分以及整体层次 组合模式创建了一个包含自己对象组的类...组合模式属于结构型模式,它创建了对象组的树形结构 摘要 1、意图: 将对象组合成树形结构以表示”部分-整体”的层次结构。...组合模式使得用户对单个对象和组合对象的使用具有一致性 2、主要解决: 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦...2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝 7、优点: 1、高层模块调用简单 2、节点自由增加 8、缺点: 在使用组合模式

    45031

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

    形成了一个树形结构. but,上面的代码还是存在缺陷,IBox接口承担了两种职责,一种是是维护容器,另一种是处理容器的结构,执行容器的方法,虽然违背了OOP职责单一的原则,但是这种代价可以接受. 3、组合模式的要点...(1)、重构的代码使用了组合模式,组合模式采用树形结构来实现普遍存在的对象容器,将原先暴露给客户端的"一对多"的关系转换为"一对一"的关系,使得客户端代码可以一致地处理容器对象,不需要关心处理的是单个对象还是含有树形结构的容器对象...,将递归处理容器的复杂度交给组合模式来承担. (2)、将客户端调用代码与负责的容器结构解耦是Composite组合模式的核心思想,解耦之后,客户端代码与依赖的是容器抽象,而不是容器的内部实现结构,从而更能应对变化...,试想以下,如果不这么做,如果容器对象发生改变,那么客户端就需要承受这种改变. (3)、Composite模式在具体的实现中.可以让父对象的子对象进行反向追溯,如果父对象有频繁的遍历需求,可以使用缓存来改善效率.... (4)、Asp.Net中的控件大量使用了组合模式,可以参考帮助理解.

    34730

    组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)

    组合模式(合成模式 COMPOSITE) 意图 将对象组合成树形结构以表示“部分-整体”的层次结构。 Composite使得用户对单个对象和组合对象的使用具有一致性。...所以,组合模式就是对于树形结构场景下的一种使用模式 共同的抽象提取为新的组件Component,可以表示叶子或者树枝 但是需要注意到:树枝可以有多个树叶组成,树枝上面也可能是树枝,也就是说,作为树枝的节点...所以组合模式的意图,从结构图中的Component中就可以看出来 他们都是Component,所以具有一致性。 借助于Composite与Component的关系,又能够表述整体与部分的关系。...中 这被称为安全方式的合成模式 因为是在Composite中管理子对象,叶子节点类型的对象根本就没有这些方法,所以也不能对客户端执行这些方法 但是,叶子节点和树枝节点不够透明,他们拥有不同的方法...,对于具有整体与部分关系的事物,如果需要一致性的外在表现,就可以提取共性进行抽象,这就是组合模式

    51810

    精读《设计模式 - Composite 组合模式

    Composite(组合模式Composite(组合模式)属于结构型模式,是一种统一管理树形结构的抽象方式。 意图:将对象组合成树形结构以表示 “部分 - 整体” 的层次结构。...Composite 使得用户对单个对象和组合对象的使用具有一致性。...举例子 如果看不懂上面的意图介绍,没有关系,设计模式需要在日常工作里用起来,结合例子可以加深你的理解,下面我准备了三个例子,让你体会什么场景下会用到这种设计模式。...可以看到,组合模式就是将树状结构中所有节点统一抽象了,我们不需要关心叶子结点与非叶子结点的差异,而可以通过组合模式的抽象屏蔽掉这些差异,统一处理。...弊端 组合模式进行了一层抽象,其实增加了复杂系统中业务复杂度。如果 Composite 与 Leaf 差异过大,那么统一抽象带来的理解成本是很高的。

    28810

    Ruby设计模式透析之 —— 组合(Composite)

    Java设计模式透析之 —— 组合(Composite) 听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可以在其中随意选购自己喜欢的书籍。...只见你的leader思考了片刻,然后自信地告诉你,使用组合模式不仅可以轻松消除你的困惑,还能出色地完成功能。...不过这还没开始真正使用组合模式呢,好戏还在后头,你的leader吹嘘道。...组合模式的扩展性非常好,没有各种条条框框,想怎么组合就怎么组合,比如所有书籍就是由各个分类组合而来的,你的leader马上又向你炫耀了统计所有书籍的浏览量和销售量的办法。...组合模式使得用户对单个对象和组合对象的使用具有一致性。

    677100

    设计模式(七)组合模式Composite(结构型)

    设计模式(七)组合模式Composite(结构型) 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面。 例子1:就是多级树形菜单。...如果你想要描述这样的数据结构,那么你可以使用组合模式Composite。 4....组合模式和其他相关模式 1)装饰模式(Decorator模式)经常与Composite模式一起使用。当装饰和组合一起使用时,它们 通常有一个公共的父类。...2)Flyweight模式让你共享组件,但不再能引用他们的父部件。 3)(迭代器模式)Itertor可用来遍历Composite。...4)(观察者模式)Visitor将本来应该分布在Composite和L e a f类中的操作和行为局部化。 11.

    27820

    浅谈JAVA设计模式之——组合模式Composite

    Composite使得用户对单个对象和组合对象的使用具有一致性。 二、适用性 1.表示对象的部分-整体层次结构。 2.希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。...3.Composite 定义有子部件的那些部件的行为。存储子部件。在Component接口中实现与子部件有关的操作。 4.Client 通过Component接口操纵组合部件的对象。 四、类图 ?...五、示例 Component package com.lyz.design.composite; import java.util.List; /** * 定义Component 类Employer...List getEmployers() { return this.employers; } } Leaf package com.lyz.design.composite...package com.lyz.design.composite; import java.util.ArrayList; /** * 定义Composite类ProjectManager类

    39110
    领券