Composite模式】的更多相关文章

组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 Composite模式,关键是一个抽象类(组件),既可以代表对象(叶子节点),又可以代表组合(中间节点).使用组合模式,我们能把相同的操作应用到组合和个别对象上. 通过让组件包含管理子节点和叶节点的操作,换取了对客户的透明性. 透明性和安全性的抉择 组合模式,使得用户对叶子节点和中间节点一视同仁,但是用户可以叶…
=================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我 勿用于学术性引用. 勿用于商业出版.商业印刷.商业引用以及其他商业用途. 本文不定期修正完善. 本文链接:http://www.cnblogs.com/wlsandwho/p/5160380.html 耻辱墙:http://www.cnblo…
1 意图:将对象组成树形结构,以表示“部分——整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2 动机:同意处理图元对象和包含图元的容器对象.Composite通过递归的方式实现统一处理. 关键是一个抽象类,既能代表图元又能代表容器. 3 适用性: . 表示"部分-整体"的层次结构 . 希望用户忽略组合对象和单个对象的不同,用户将统一使用组合结构中的所有对象. 4 参与者: . Component(Graphic) 为组合中的对象声明接口.适当情况,…
类图 /** * 树 总体 * * @author stone * */ public class Tree { private TreeNode root; //根节点 public Tree(String name) { this.root = new TreeNode(name); } public TreeNode getRoot() { return root; } } /** * 树节点 部份 * 也能够自身代表树:一堆节点组成了一颗树 * * @author stone * */…
组合模式意在将对象组合成树形结构以表示部分与整体的层次结构关系,并且用户对单个对象的操作以有对组合对象的操作都是一致的.即:组合对象 is-a 单个对象,同时又可以组合着 n 个的单个对象(甚至于其他组合对象也可以).当对一个组合对象执行某行为会被转化为对其所组合的 n 个对象进行操作.一个组合对象,又可被看作是一个大一些的.较简单单个对象稍微复杂些的单个对象,它也可以进一步被其他组合对象组合.类关系图参考如下: 数据结构中的树节点的设计,就是个典型的组合模式的应用.每个树节点可组合着N个节点,…
composite模式的意图是:将对象组合成树形结构以表示“部分-整体”的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性.它的类图如下: composite模式的实现分为透明的composite模式和安全的composite模式,二者的差别是添加.删除和获取子节点的行为放到基类还是放到复合节点类中.透明的则放到基类中,但是这些行为对于不可再分的叶子节点来说是无意义的,对于存在子节点的复合节点才有意义.但是透明的组合模式具有更好的一致性和可读性,一般都建议用透明的组合模式…
Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图.组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行.可以用牵一动百来形容. 所以Composite模式使用到Iterator模式,和Chain of Responsibilit…
composite模式又叫做组合模式/复合模式. 它是一种能够使容器与内容具有一致性,创造出递归结构的模式. 示例程序是列出文件夹以及其内部文件与文件夹一览的功能: 可以由示例图看出,有一个电影文件夹里面有两个文件夹,一个是正常,一个是你懂得. 在正常文件夹里面有三个电影,分别是泰坦尼克号,终结者和钢铁侠. 而在你懂得文件夹里面有两部电影和一个葵司文件夹,两部电影分别是列车.avi和苍老师.avi,而葵司文件里面同样也有两部电影,家庭教师.avi和隔壁小姐姐.avi. 下面是示例代码: Some…
Android的ViewGroup 和 View 的关系,即是采用组合模式 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件和文件夹目录 2.问题 我们可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.我们可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象.客户端代码必须区别对象简单对象和容器对象,而实际上大多数情况下用户认为它们是一样的.对这些类区别使用,使得程序更加复杂.递归使用…
Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也可以放入其他文件夹(子文件夹).在子文件夹中,一样地既可以放入文件,也可以放入子文件夹.可以说,文件夹是形成了一种容器结构.递归结构. 结构模式:能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式. 关注点:使用Composite模式可以使容器与内容具有一致性,也可以称其为多个和单个的…
Composite模式模式能够使容器与内容具有一致性,创造出递归结构.有时,与将文件夹和文件都作为目录条目看待一样,将容器和内容作为同一种东西看待,可以帮助我们方便地处理问题.在容器中既可以放入内容,也可以放入小容器,然后在那个小容器中,又可以放入更小的容器.这样,就形成了容器结构.递归结构. 示例程序类图如上图. package bigjunoba.bjtu.composite; public abstract class Entry { public abstract String getN…
目录 代码 角色 想法 Composite模式即组合模式.它能够使容器和内容具有一致性,创造出递归结构. 举个例子:在文件系统中,文件夹既是内容,也是容器,具有一致性,这样一来,文件系统形成递归结构.组合模式就是用来创建这种结构的. 代码 下面这段代码以文件系统为例实现了组合模式. UML Entry类 表示目录条目,将文件和文件夹的共有属性抽取出来. public abstract class Entry { public abstract String getName(); public a…
组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户能够忽略组合对象与单个对象的不同,统一地使用组合结构中的全部对象时,就应该考虑用组合模式. 首先定义一个Componet抽象类 public abstract class Component { protected String name; public Component(String name){ thi…
实现要点: 1.组合模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器. 2.将“客户代码与复杂的对象容器结构”解耦是组合模式的核心思想,解耦之后,客户代码将与纯粹的抽象接口——而非对象容器的复内部实现结构——发生依赖关系,从而更能“应对变化”. 3.组合模式中,是将“Add和Remove等和对象容器相关的方法”定义在“表示抽象对象的Component类”中,还是将其定义在…
一. 举例 这个样例是书上的,如果有一个公司的组结结构例如以下: 它的结构非常像一棵树,当中人力资源部和財务部是没有子结点的,详细公司才有子结点. 并且最关健的是,它的每一层结构非常相似. 代码实现例如以下: #include <iostream> #include <list> #include <string> using namespace std; //公司类,提供接口   class Company       {     public:     Compan…
合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 合成模式把部分和整体的关系用树结构表示出来.合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待.比如,一个文件系统就是一个典型的合成模式系统.下图是常见的计算机XP文件系统的一部分. 从上图可以看出,文件系统是一个树结构,树上长有节点.树的节点有两种,一种是树枝节点,即目录,有内部树结构,在图…
定义 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象.组合模式定义了“部分-整体”的层次结构,基本对象可以被组合成更大的对象,而且这种操作是可重复的,不断重复下去就可以得到一个非常大的组合对象,但这些组合对象与基本对象拥有相同的接口,因而组合是透明的,用法完全一致. 代码: #include <iostream> #include <list&g…
一. 举例 这个例子是书上的,假设有一个公司的组结结构如下: 它的结构很像一棵树,其中人力资源部和财务部是没有子结点的,具体公司才有子结点. 而且最关健的是,它的每一层结构很相似. 代码实现如下: //公司类,提供接口 class Company { public: Company(string name) { m_name = name; } virtual ~Company() {} virtual void Add(Company *pCom) {} virtual void Displa…
组合模式属于对象的结构模式,有时又叫做部分-整体模式,组合模式将对象组织到树结构中,可以用来描述整体与部分的联系.其可以使客户端将单纯元素和组合元素同等对待. 当需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式了. 组合模式(或叫合成模式)是将对象组合成树形结构以表示部分-整体的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 注:组合模式是使用其中有个组件成员的vector或者list,…
写在前面 Composite组合模式属于设计模式中比较热门的一个,相信大家对它一定不像对访问者模式那么陌生,毕竟谁又没有遇到过树形结构呢.不过所谓温故而知新,我们还是从一个例子出发,起底一下这个模式吧. 一个简单例子 设想我们要建立一个公司的人事架构,在一个公司里,我们可以简单地分为两种员工,一种是经理(包括老板),另一种是基层员工,经理可以有下属,而普通员工不行,我们写出这样的代码. 基层员工类 这种员工是最基层的员工,没有下属 class BasicLevelEmployee //基层员工…