18、迭代器与访问者模式:软件设计中的实用利器

迭代器与访问者模式:软件设计中的实用利器

1. 迭代器模式

迭代器模式是软件设计中用于遍历集合对象的一种有效方式。枚举器作为一种工厂方法,具有很大的灵活性,它可以在不修改客户端代码的情况下返回不同 MarkEnumerator 子类的对象。若要让工厂方法支持不同的遍历方式,可以让该方法接受一个指定遍历类型的参数,从而在运行时选择不同的 MarkEnumerator

在遍历聚合对象时修改它是有风险的。如果在聚合中添加或删除元素,可能会导致重复访问某个元素或完全错过它。简单的解决办法是对聚合进行深拷贝,然后遍历副本,但这可能会带来性能问题。

有多种实现迭代器的方法可以避免元素插入和删除的干扰,大多数方法依赖于将迭代器注册到聚合中。具体做法是,在插入或删除元素时,聚合要么调整其生成的迭代器的内部状态,要么在内部维护信息以确保正确遍历。

1.1 外部迭代器与内部迭代器
  • 外部迭代器 :需要客户端向集合对象请求其迭代器,然后通过循环遍历迭代器来访问每个元素。客户端在循环中每次向迭代器发送 nextObject 消息,直到集合遍历完毕。
  • 内部迭代器 :由集合对象本身控制迭代过程。可以通过让客户端为内部迭代器提供某种回调机制,使其在准备好时返回集合中的下一个元素。自 iOS SDK 4.0 引入以来,Objective - C 块成为实现内部迭代器的自然选择。块是一种函数类型,定义后可在应用程序的任何地方重用,在很多方面比 C 函数指针更强大。 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值