设计模式--迭代器与组合模式

有许多种方法可以把对象堆起来成为一个集合。你可以把对象放进数组、堆栈、列表或者散列表(hashMap)中,每一种都有各自优缺点,但总有一个时候,你希望遍历这些对象,当你遍历对象时,你可能不希望客户看到你的实现,这时候就用到了迭代器模式。

假设有两个餐厅,用不同的数据结构来存储他们的菜单,一个餐厅使用数组,另一个餐厅使用ArrayList.




现在女招待需要打印出菜单上的每一项,按照一般方法就是用不同方法循环打印出菜单来,这里要写两个不同方法,如果有第三家餐厅,用另外方式存储菜单,我们就要另写方法了。

例如这样:


··、

看到上面代码,我们应该想想如何封装遍历。

我们新建一个迭代器接口


我们需要实现一个具体的迭代器,为餐厅菜单服务。


餐厅菜单就变成这样了


现在女招待的代码变成这样




你还可以给Iterator接口添加方法,比如remove()


还能进一步提前出Menu接口


具体别的代码就不列出来了。这样女招待就能利用接口(而不是具体类)引用每一个菜单对象。这样就通过“针对接口编程,而不是针对实现编程”,我们就可以减少女招待与具体类之间的依赖。


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


组合模式

我们也可以使用组合模式来解决上面菜单问题。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 工资表数据的整合## 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目...
    七寸知架构阅读 2,587评论 0 53
  • 在吗,今晚我想和你一起去看星星?你有多久没去看星星了?应该是很久吧!你还记得上一次看星星是什么时候吗? 晚上,我埋...
    猪肝炒藕阅读 1,915评论 30 35
  • “卧槽!不要告诉我这黑不溜秋的人是小哥?” “对啊那煤炭就是小哥啊。” “纳尼?!说好的容貌俊逸白净,气质淡出红尘...
    滕沐阅读 1,076评论 0 1
  • 某天看见一只小蜗牛,努力而又笨拙的挪动着身子,觉得自己像极了它。 我总觉着,背上长了一个重重的壳,我想把身子...
    永远的蛹阅读 678评论 0 0
  • 成功不靠奇迹靠轨迹,昨天看到一段话,很有感触,分享给大家,这段话是这样讲的,不是井里没有水,是挖的不够深,不是成功...
    大道行者_阅读 433评论 0 0