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

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

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




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

例如这样:


··、

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

我们新建一个迭代器接口


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


餐厅菜单就变成这样了


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




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


还能进一步提前出Menu接口


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


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


组合模式

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

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

你可能感兴趣的:(设计模式--迭代器与组合模式)