《Head First 设计模式》笔记9 迭代器与组合模式

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个原色,而又不暴露其内部的表示。

对象村餐厅&煎饼店的迭代器模式实例:
在这里插入图片描述

迭代器模式类图
在这里插入图片描述

设计原则:一个类应该只有一个引起变化的原因。

如果我们允许我们的聚合实现他们内部的集合,以及相关的操作和遍历的方法,又会如何?我们已经知道这会增加聚合中的方法个数,但又怎样呢?为什么这么做不好?

我们知道避免类内的改变,因为修改代码很容易造成许多潜在的错误。如果有一个类具有两个改变的原因,那么这会使得将来该类的变化几率上升,而当它真的改变时,你的设计中同时有两个方面将会受到影响。

把对元素的遍历从服务员类中分离出来,单独用迭代器接口封装遍历,就是遵循了这个原则,不让对遍历的修改引起对服务员类的改变。

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

总而言之,当你有数个对象的集合,它们彼此之间有“整体/部分”的关系,并且你想用一致的方式对待这些对象时,可以考虑组合模式。

组合模式类图
在这里插入图片描述

示例:使用组合模式重构对象村餐厅菜单
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
修改一下Menu的print()方法,让其遍历打印所有菜单子节点:
在这里插入图片描述
把组合模式用的迭代器补上:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值