设计模式之迭代器与组合模式(三)

现在我们已经能愉快地看着一页一页罗列出来的菜单进行点菜了。现在又有的小伙伴希望能够加上一份餐后甜点的“子菜单”。怎么办呢?我们不仅仅要支持多个菜单,甚至还要支持菜单中的菜单。

如果我们能让甜点菜单变成餐厅菜单集合的一个元素,那该有多好。但是根据现在的实现,根本做不到呀。我们想要的是这样的:

我们需要什么

现在我们遇到的现实问题是,我们的系统已经达到了一个复杂的级别,如果现在不重新设计,就无法容纳未来增加的菜单或子菜单等需求。

所以,在我们的新设计中,真正需要些什么呢?

  • 我们需要某种树形结构,可以容纳菜单、子菜单和菜单项
  • 我们需要确定能够在每个菜单的各个项之间游走,而且至少要像现在用迭代器一样方便
  • 我们也需要能够更有弹性地在菜单项之间游走。比方说,可能只需要遍历甜点菜单,或者可以遍历餐厅的整个菜单(包括甜点菜单在内)。

定义组合模式

没错,我们要介绍另一个模式解决这个难题。我们并没有放弃迭代器--它仍然是我们解决方案中的一部分--然而,管理菜单的问题已经到了一个迭代器无法解决的新维度。所以,我们将倒退几步,改用组合模式来实现。

组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

让我们以菜单为例思考这一切:这个模式能够创建一个树形结构,在同一个结构中处理嵌套菜单和菜单项组。通过将菜单和项放在相同的结构中,我们创建了一个“整体/部分”层次结构,即由菜单和菜单项组成的对象树。但是可以将它视为一个整体,像是一个丰富的大菜单。

一旦有了丰富的大彩蛋,我们就可以使用这个模式来“统一处理个别对象和组合对象”。这意味着什么?它意味着,如果我们有了一个树形结构的菜单、子菜单和可能还带有菜单项的子菜单,那么任何一个菜单都是一种“组合”。

因为它既可以包含其他菜单,也可以包含菜单项。个别对象只是菜单项--并未持有其他对象。就像你将看到,使用一个遵照组合模式的设计,让我们能够写出简单的代码,就能够对整个菜单结构应用相同的操作。

结合图来描述如下:

组合模式的类图如下:

了解完组合模式的种种,在下次的推文中,我们将用于实际操作。我们利用组合模式设计菜单,并且使用菜单,以此来巩固加深。敬请期待吧。

爱生活,爱学习,爱感悟,爱挨踢

(0)

相关推荐

  • [PHP小课堂]PHP设计模式之迭代器模式

    [PHP小课堂]PHP设计模式之迭代器模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • win10无法开启网络发现怎么办 如何启用网络发现

    在Windows10系统开启网络发现的时候,即使点击选中了开启网络发现一项,但一会又自动关闭了,这是怎么回事呢?如何开启Windows10的网络发现功能呢?下面就一起来看看解决方法吧. 编辑 工具/原 ...

  • 设计模式之迭代器与组合模式(二)

    在上次的文章中,我们通过层层引导,已经知道了迭代器模式的由来.现在我们再好好总结下. 关于迭代器模式,你所需要知道的第一件事情,就是它依赖于一个名为迭代器的接口.这是一个可能的迭代器的接口: 现在,我 ...

  • 生成器与迭代器的区别

    生成器与迭代器的区别

  • 设计模式之迭代器与组合模式(一)

    很高兴,这本书总共13章,这次已经是到第9章了:同时也很遗憾,小编脱离了书本,还是不知道如何描述一个设计模式.就比如迭代器与组合模式,原书篇幅比较长,小编尽量通俗易懂些,不到之处,还请各位小伙伴参考原 ...

  • 设计模式(十)——组合模式(HashMap源码解析)

    设计模式(十)——组合模式(HashMap源码解析)

  • 打板模型图解:涨停双响炮的三种K线组合模式

    我们知道股市中大幅连续大阳线拉升的股票很少见,更多的还是大阳线后会接连几天出现调整,实战中我们往往不敢在其调整时贸然下手,股市中谨慎永远没有错,这种态度无可厚非,谁也不知道这到底是调整还是庄家在出货, ...

  • PHP设计模式之迭代器模式

    PHP设计模式之迭代器模式 一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语 ...

  • PHP设计模式之组合模式

    PHP设计模式之组合模式 互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内.但是很多传统企业,则会有非常深的层级关系,从数据结构 ...

  • [PHP小课堂]PHP设计模式之组合模式

    [PHP小课堂]PHP设计模式之组合模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • C#设计模式-组合模式(Composite Pattern)

    概念 组合是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们. 组合模式(Composite Pattern)是将对象组合成树形结构以表示'部分-整体'的层次 ...