设计模式之~组合模式

组合模式:

        将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

结构图:

实例:

透明方式: 

        leaf中也有add和remove叫做透明方式,在component中声明所有用来管理子对象的方法,其中包括add、remove等。这样实现component接口的所有子类都具备了add和remove。这样的好处是叶节点和枝节点对外界没有区别,他们具备完全一致的行为接口。

        但问题也很明显,因为leaf类本身不具备add和remove等功能,所以实现他是没有意义的。

透明模式的特点:

        就是将组合对象所有的公共方法都定义在了抽象组件内,

优点:是客户端无需分辨当前对象是属于树枝节点还是叶子节点,因为它们具备了完全一致的接口,

缺点:叶子节点得到到了一些不属于它的方法.。树叶是不存在子类的,因此Component声明的一些方法对于树叶来说是不适用的。这样也就带来了一些安全性问题。

安全方式:

        在Component接口中不去声明Add和Remove方法,那么子类的Leaf也就不需要去实现它,而是在Composite声明所有用来管理子类对象的方法。这样做不会出现Leaf做无用功的问题,不过由于不够透明,所以树叶和树枝类将不具有相同的接口,客户端的调用需要做相应的判断,带来了不便。

优点:安全组合模式只是规定了系统各个层次的最基础的一致性行为,而把组合(树节点)本身的方法(如树枝节点管理子类的addChild等方法)放到自身当中。这样就避免了上一种方式的安全性问题

缺点:由于叶子和分支有不同的接口,所以又失去了透明性。

透明模式VS安全模式:在这一模式中,相对于安全性,我们比较强调透明性。对于第一种方式中叶子节点不需要的方法可以使用空处理或者异常报告的方式来解决。

优点:

  • 定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去,客户端代码中,任何用到基本对象的地方都可以使用组合对象。

  • 用户不用关心到底是处理一个叶节点还是处理一个组合组件,也就是用不着为定义组合而写一些选择判断语句了。(让客户端忽略了层次的差异,方便对整个层次结构进行控制)

  • 组合模式让客户端可以一致的使用组合结构和单个对象。

  • 简化客户端代码

  • 符合开闭原则

缺点:

  • 限制类型时较为复杂

  • 使设计变得更加抽象

  • 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

适用场景:

当发现需求中是体现部分与整体的层次结构时;以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。

当处理一个树型结构时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/256624.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

玩具租借小程序

玩具是儿童的必需品,家长每年都会给孩子购买少则几百多则几千的玩具,但是由于孩子对玩具喜新 厌旧,一个几百元的玩具几天就不感兴趣了,而市场上层出不穷的高价玩具及孩子对玩具永不满足的渴求,都在促使家长对"玩具…

租号网程序源码 无错版本完整无缺

介绍: 注意事项: 安装租号程序 需要WIN08服务器 iis7.0 sq2012 NET4.6 程序直接放入设置好的 网站根目录即可 (SA密码设置yixiaoka888) 网盘下载地址: http://kekewl.cc/tJoeIk6qPlJ 图片:

在线游戏租号声优陪玩网站源码+威客平台源码/亲测

正文: 由于标题太长了,所以本文标题简略写了,下方图片才是程序完整标题: 这系统界面美观,功能非常齐全,已对接支付,亲测可用,有详细的安装教程,全部放压缩包里了,有兴趣自己去看。 …

麒麟子出了一款免费3D角色虚拟摇杆控制器!这也太好用了

不需要编写代码,通过简单的拖拽和配置,就可以使你在手机上控制摄像机旋转和操作角色。 EasyJoystick EasyCamera EasyTouch 以上效果就 麒麟子 最近在 Cocos Store 分享的 KylinsEasyController 组件源码,它包含以下主要特性: 虚拟…

租赁小程序源码芝麻免押租机平台手机租赁代运营

租赁小程序 手机租赁 小程序代运营 租赁 免押租 代运营 上征信 银行风控 芝麻免押 支付宝服务商 支付宝租赁服务商 租赁平台源码 租赁小程序源码 租机平台源码 手机租赁源码 租赁小程序源码 芝麻免押租 租赁平台 小程序源码

如何在雷电模拟器里使用YiLu代理的动态ip?

1在易路“程序”页面里随意添加一个应用,请不要添加“雷电”到YiLu程序里; 2.YiLu设置: ① 点击YiLu“设置”页面; ② 选择“YiLu便携代理引擎”; ③ 选择“仅代理YiLu程序选项卡中的应用程序,其他通过您…

原神抢码,米游社抢码-首发

本文章仅供学习使用-侵权请联系删除_2023年3月14日08:17:06 本来在深渊12层打不过的我偶然在刷到了一个dy的直播间,看到主播在抢码上号帮忙打深渊还号称痛苦号打不满不送原石的旗号我就决定扫码试试,在直播间内使用了两部手机互相扫码在扫了一下午的码后…

腾讯大王卡扫号器

正文开始》》花莳王卡扫号器不做任何收益动作,要过年了坑逼多。该信息可以让你自行辨别是否交智商费《正文结束 --------------------------------------------------------------------------------------------------------------------------------------------…

剖析CPU性能火焰图生成的内部原理

关注开发内功修炼,掌握硬核技术原理 大家好,我是飞哥! 在进行CPU性能优化的时候,我们经常先需要分析出来我们的应用程序中的CPU资源在哪些函数中使用的比较多,这样才能高效地优化。一个非常好的分析工具就是《性能之巅…

上号神器|王者扫码登录教程,苹果安卓通用扫码教程(建议收藏)

大家好,我是上号神器,很多玩王者的小伙伴都不知道怎么通过扫码进行登录王者,下面就为大家说下上号神器的使用教程,不用卸载微信也能登录王者号,十分地方便快捷! 首先玩家需要进入上号神器地址(…

多家游戏交易平台发声,禁止未成年人买号租号

游戏租号绕开防沉迷系统事件迎来下文。9 月7 日,DD3737、交易猫、5173 等游戏交易平台相继发布声明,已采取严格措施禁止任何未成年人利用游戏交易平台买卖和租赁游戏账号。 同时,上述游戏交易平台还呼吁:游戏出版、发行、运营、交…

app账号退不出去_怎么去和平精英租号平台APP上租号玩和平精英

怎么去和平精英租号平台APP上GG租号租玩和平精英了?首选给大家讲解下和平精英租号平台App的一些功能介绍。 租号平台app可以让用户在这个平台上,拥有武器和皮肤的软件平台,用户有了这款软件后,就在也不用充钱来购买武器和装备&…

租号玩上号器显示服务器繁忙,租号玩出现错误1003是怎么回事?

2007-06-20 我还几天前把自己的帐号自己锁了然后我去登陆游戏社区但上面老显示验证码错误我就换个号上但无论我登陆什么号都上不了怎么办最后我新建一个号但建不了了验证码老错误可我明明输入对了啊大小写都试过不知道怎么回事我就等几天以为是系统问题可是还是不行老显示验证码…

Go开发学习 | 如何快速读取json/yaml/ini等格式的配置文件使用示例

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页:[ https://www.weiyigeek.top ] 博客&…

Kafka笔记

1. MQ产品对比 ActiveMQRabbitMQRocketMQKafkaEMQ公司/社区ApacheRabbit(https://www.rabbitmq.com/)阿里(https://rocketmq.apache.org/)Apache(http://kafka.apache.org/ )EMQ X(https://www.emqx.cn/)开…

以支付宝为例,聊聊Web安全的三个攻防姿势

我们最常见的Web安全攻击有以下几种 XSS 跨站脚本攻击CSRF 跨站请求伪造clickjacking 点击劫持/UI-覆盖攻击 下面我们来逐个分析 一、XSS 跨站脚本攻击 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Styl…

详解.NET IL代码

IL是什么? Intermediate Language (IL)微软中间语言 C#代码编译过程? C#源代码通过LC转为IL代码,IL主要包含一些元数据和中间语言指令; JIT编译器把IL代码转为机器识别的机器代码。如下图 语言编译器&am…

桌面宠物大全

无聊收集的: 桌面宠物大全 24个桌面宠物 类似种种,总之花了很多精力,将网上能见到的基本都收录了。其中:无需汉化的25个、盛华汉化的255个、未能汉化的32个,共312个。 看看自己朝夕相处的电脑桌面,还是一如既往的一片寂静,太没有气氛了。今天就给大家介绍几个好玩的桌…

为什么职场中35岁之后很难找到合适的工作?

(点击即可收听) 为什么职场中35岁之后很难找到合适的工作 无论是初入职场还是,职场多年的老司机,都听过一个35岁危机的一个话题 无论是企业还是一些招聘者,针对35,甚至就是30的人,充满了不是这样,就是那样的偏见的理由 每个公司都喜欢有激情,有想法,有干劲的年轻人,无论哪个公司…

读数据压缩入门笔记03_VLC

1. 概率、熵与码字长度 1.1. 数据压缩的目的 1.1.1. 给定一个数据集中的符号,将最短的编码分配给最可能出现的符号 1.2 1.2.1. 当P(A)P(B),也就是两个符号等可能出现时,数据集对应的熵取最大值LOG2(符号的个数)&…