组合模式

设计模式2-结构型模式

隐身守侯 提交于 2020-02-14 22:00:05
前言 类之间的联系,主要有继承和组合 结构型模式:处理类与类之间的关系,它们之间的协作更加优雅,继承与组合,优先使用组合 一、适配器模式 当现有类与需要调用的类不匹配时,需要创建一个适配器类 来将不匹配的类 封装匹配的类-----》通过组合方式 用法: 1、 AppleBagAdapter继承AppleBag的功能,同时组合OrgangeBag对象,使AppleBag与OrangeBag产生关联。 2、当AppleBag目标方法被调用时, AppleBagAdapter转调OrgangeBag的对象方法 PS: OrangeBag和AppleBag都是已有类,是系统已有方法。 整个过程,只新增了一个AppleBagAdapter类,去充当AppleBag实现 二、桥接模式 ---------将两个维度变化的功能组合起来,为的是独立变化。 桥接模式: 设计之初的分离 适配器模式:将2个已经存在的类,进行适配组合 来源: CSDN 作者: ccddsdsdfsdf 链接: https://blog.csdn.net/lh87270202/article/details/103656658

组合模式(composite)C++实现

旧巷老猫 提交于 2020-02-12 05:44:58
组合模式 意图: 将对象组合成树形结构以表示‘部分-整体’的层次结构,所以有时候又叫做部分-整体模式。组合模式使得用户对单个对象和组合对象的使用具有一致性。,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 适用性: 当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时。 优点: 组合模式使得基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了。 组合模式让客户可以一致的使用组合结构和单个对象。 UML: 抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象定义出公共的接口及其默认行为,可以用来管理所有的子对象。在安全式的合成模式里,构件角色并不是定义出管理子对象的方法,这一定义由树枝构件对象给出。 树叶构件(Leaf)角色:树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。 树枝构件(Composite)角色:代表参加组合的有下级子对象的对象。树枝对象给出所有的管理子对象的方法,如add()、remove()、getChild()等。 代码实现: 输出对应公司结构和其部门职责,这里总公司

合成模式(Composite Pattern)

北战南征 提交于 2020-02-12 04:59:55
一、 合成(Composite)模式 合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 从和尚的故事谈起 这是小时候我奶奶讲的故事:从前有个山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的什么故事呢?从前有个山,山里有个庙……。奶奶的故事要循环多少次,根据你多长时间睡着而定。在故事中有山、有庙、有和尚、有故事。因此,故事的角色有两种:一种里面没有其它角色;另一种内部有其它角色。 对象的树结构 一个树结构由两种节点组成:树枝节点和树叶节点。树枝节点可以有子节点,而一个树叶节点不可以有子节点。除了根节点外,其它节点有且只有一个父节点。 注意:一个树枝节点可以不带任何叶子,但是它因为有带叶子的能力,因此仍然是树枝节点,而不会成为叶节点。一个树叶节点永远不可能带有子节点。 二、 合成模式概述 下图所示的类图省略了各个角色的细节。 可以看出,上面的类图结构涉及到三个角色: 抽象构件(Component)角色: 这是一个抽象角色,它给参与组合的对象规定一个接口。这个角色给出共有接口及其默认行为。 树叶构件(Leaf)角色: 代表参加组合的树叶对象。一个树叶对象没有下级子对象。 树枝构件(Composite)角色: 代表参加组合的有子对象的对象,并给出树枝构件对象的行为。

Java设计模式-组合模式

一曲冷凌霜 提交于 2020-02-02 10:27:08
一、概述 组合模式,又叫 部分整体模式 ,属于 结构型模式 ,它创建了对象组的属性结构, 将对象组合成树状结构以表示“整体-部分”的层次关系 。组合模式可以不提供父对象的管理方法,但是组合模式必须在合适的地方提供子对象的管理方法,例如:add(),remove()以及getChild()等。组合模式的实现根据所实现接口的区别分为 安全式 和 透明式 。 二、角色 抽象构件(Component) :定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性 树枝构件(Composite) :树枝对象,用于存储子部件,在Component接口中实现子部件的相关操作,比如增加,删除 叶子构件(Leaf) :叶子对象,其下再也没有其他的分支,也就是遍历的最小单位 三、组合模式 1.安全式组合模式 安全模式的组合模式要求管理聚集的方法只出现在树枝构件类中,而不出现树叶构件类中 1) 抽象构件 public interface OrganizationComponent { void print(); } 2) 树枝构件 // University就是Composite public class University implements OrganizationComponent { private String name; // 存放的是College private List

设计模式之组合模式

时光怂恿深爱的人放手 提交于 2020-02-01 09:09:36
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可。 定义:(GoF《设计模式》):将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 从定义中可以看出,组合模式用来表示部分与整体的层次结构(类似于树结构),而且也可以使用户对单个对象(叶子节点)以及组合对象(非叶子节点)的使用具有一致性,一致性的意思就是说,这些对象都拥有相同的接口。 很多书中包括文章都喜欢使用公司、子公司以及部门的例子,这其实就是一个典型的树结构。其实生活当中的树结构还有很多,比如书的目录、文件系统、网站的菜单等等,有很多很多。 我们先来看看组合模式的类图,引自百度百科。 类图当中有三个类,一个是Component(节点的统一接口),它的目的是为了统一节点的操作。接下来的两个实现类,一个则是非叶子节点(Composite),它可以有子节点。另外一个则是叶子节点(Leaf),它不能含有子节点。 我们随便挑一个树结构的例子,比如文件系统,我们来分析一下,在文件系统中,如果使用组合模式,各个部分的类都应该是什么样子的。 首先,文件系统中,叶子节点是文件,非叶子节点是文件夹,所以Leaf和Composite实现类就是文件和文件夹

组合模式

删除回忆录丶 提交于 2020-02-01 09:04:47
/** *组合模式:一个对象的属性是另一个对象,这就是组合模式了,应该是最常用的模式了: * 如学校对象,学校里面有多个班级,这样就可以将班级组合到学校里面了 * * */ public class School { private List<Class> classes; public List<Class> getClasses() { return classes; } public void setClasses(List<Class> classes) { this.classes = classes; } } public class Class { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 来源: https://www.cnblogs.com/yangxiaohui227/p/10912447.html

【php设计模式】组合模式

[亡魂溺海] 提交于 2020-02-01 08:57:50
定义:   是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 应用场景:   部分、整体场景,如树形菜单,文件、文件夹的管理 通俗解释:   组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。很明显,这是树形结构,终结点叫叶子节点,非终节点(组节点)叫树枝节点,第一个节点叫根节点。同时也类似于文件目录的结构形式:文件可称之为终节点,目录可称之为非终节点(组节点)。 实现如图所示的树形结构 interface Node{ public function add(Node $node); } class Branch implements Node{ static $i = 0; public $name; public $node_list; public function __construct($name){ $this->name = $name; } public function add(Node $node){ $this->node_list[] =

设计模式之组合模式(Composite)

南楼画角 提交于 2020-02-01 08:54:54
组合模式(Composite):将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。让可以可以一致地使用组合结构和单个对象。 Component:为组合中的对象声明接口,在适当情况下,实现所有类所有接口的默认行为。证明一个接口/用于访问和管理Component的子部件。 Leaf:在组合中表示叶节点的对象,叶节点没有子节点。 Composite:定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关的操作,比如增加Add和删除Remove。 需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象是,考虑使用组合模式。 Composite1.cs 代码 using System;using System.Collections.Generic;using System.Text;//组合模式(Composite):将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个//对象和组合对象的使用具有一致性。让可以可以一致地使用组合结构和单个对象。//Component:为组合中的对象声明接口,在适当情况下,实现所有类所有接口的默认行为。证明一个接口//用于访问和管理Component的子部件。//Leaf:在组合中表示叶节点的对象

设计模式之组合模式

限于喜欢 提交于 2020-02-01 08:28:22
一.组合模式的定义 组合模式将对象组合成树状结构以表示“整体-部分”的层次关系; 组合模式使得用户对单个对象和组合对象的访问具有一致性。 二.组合模式的角色及职责 1.Component 这是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。 2.Leaf 在组合中表示叶子节点对象,叶子节点没有子节点。 3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关的操作,如增加(add)和删除(remove)等。 组合模式的UML图: 实例代码如下: 1 public abstract class Component { 2 private String name; 3 4 public void setName(String name) { 5 this.name = name; 6 } 7 8 public String getName() { 9 return name; 10 } 11 12 protected abstract void add(Component c); 13 14 protected abstract void remove(Component c); 15 16 protected abstract void display(int

设计模式系列-组合模式

☆樱花仙子☆ 提交于 2020-02-01 08:27:18
原作王波洋 设计模式系列-组合模式 今天下班客厅的灯确实亮堂了许多,照照镜子感觉自己一下苍老许多,看来还是灯光暗比较好,看不出来自己的憔悴啊,哈哈,其实还是头发长了,决定出去剪发。 进到美发店,便有热情的服务生招呼,显示洗头,挑选造型师,开始剪发,剪发中被造型师推荐了各种各样的收费项目,我只选择了一样软化头发。完毕之后,看了 下单子哇塞、好贵噢,不过造型师给我剪的发型我还是很喜欢的,我决定以后还找他剪,但是又太贵,无奈中,发型师向我推荐了他们的会员卡,全场所有项目均5 折,最近因为圣诞节还在搞活动这期间办卡的可享受折上折8.6,我心想那这下就太划算了,而且他们总店,分店都可以用,所以毫不犹豫的办了张会员卡。。。 囧。。。。 到家后稍微有点后悔,我竟然一时冲动花了那么多钱办了张剪发的会员卡,不过办也办了,只好自己安慰安慰自己,心想,办了卡可以打折上折,而且那么多分店想 去哪家去哪家,顿时心情好为能好一点了,突然间想到了一个模式,跟现在的场景很合适,名字叫《组合模式》,为什么说跟组合模式很相似呢? 先看看组合模式的定义吧,在《大话设计模式一书中》组合模式的定义为:“ 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 ” 那就拿我剪发办卡的事情来分析一下吧。 首先,一张卡可以在总部,分店,加盟店使用,那么总部可以刷卡