设计模式之迭代器模式

迭代器模式提供顺序访问聚合对象元素的方式,不暴露其内部结构。它简化了聚合类,支持多种遍历方式。Java中的iterator接口是其典型实现,包含hasNext、next和remove方法。模式结构包括迭代器角色、具体迭代器、容器角色和具体容器角色。通过迭代器,不同聚合类如咖啡厅和中餐厅菜单可以统一遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器模式

定义
提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。
简单来说,不同种类的对象可能需要不同的遍历方式,我们对每一种类型的对象配一个迭代器,最后多个迭代器合成一个
主要解决
不同的方式来遍历整个整合对象
何时使用
遍历一个聚合对象
如何解决
把在元素之间游走的责任交给迭代器,而不是聚合对象
关键代码
定义接口:hasNext,next
应有实例
JAVA中的iterator
优点
1、它支持以不同的方式遍历一个聚合对象
2、迭代器简化了聚合类
3、在同一个聚合上可以有多个遍历
4、在迭代器模式中,增加新的聚合类和迭代器都很方便,无需修改源代码
缺点
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

模式结构和代码示例在这里插入图片描述

(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext(),移出当前对象的方法remove()
(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代
(3)容器角色(Aggregate):一般是一个接口,提供一个iterato()方法,例如java中的collection接口,List接口,Set接口等
(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等

举例(咖啡厅和中餐厅合并,他们两个餐厅的菜单一个是数组保存的,一个是ArrayList保存的。遍历方式不一样,使用迭代器聚合访问,只需要一种方式)
在这里插入图片描述
1、迭代器接口

public interface Iterator {
   
   
	
	public boolean hasNext();
	public Object next();
	
}

2、咖啡店菜单和咖啡店菜单遍历器

public class CakeHouseMenu {
   
   
    private ArrayList<MenuItem> menuItems;

    public CakeHouseMenu() {
   
   
        menuItems = new ArrayList<MenuItem>();

        addItem("KFC Cake Breakfast","boiled eggs&toast&cabbage",true,3.99f);
        addItem("MDL Cake Breakfast","fried eggs&toast",false,3.59f);
        addItem("Stawberry Cake","fresh stawberry",true,3.29f);
        addItem("Regular Cake Breakfast","toast&sausage"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值