iOS开发技术讨论iOS备忘录计算机技术一锅炖

知识整理NO.4-#迭代器模式Iterator

2016-07-10  本文已影响135人  践行者

迭代器模式Iterator

背景

概述

类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合。

集合不一定是均一的。图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu、Slider 和 Button。并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一个链接列表,一个堆栈以及队列。

问题

如何操纵任意的对象集合?
如一个列表(List)或者一个集合(Set),我们又如何提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构?

解决方案

迭代器模式:使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 , 而又不需暴露该对象的内部结构。又叫做游标(Cursor)模式 。
你可能没有意识到这一点,但你每天都在使用迭代器模式 。

剖析

意图

定义

本质

UML

IteratorUMl.png

模式组成

分类

外部迭代器:让客户端直接操作迭代过程,所以客户端需要知道外部迭代器才能使用。

内部迭代器:集合对象在其内部维护并操作一个外部迭代器。提供内部迭代器的典型的集合对象为客户端定义一个接口,或者从底层的集合一次访问一个元素,或者向每一个元素发送消息。外部迭代器与内部迭代器的区别:

外部迭代器:

客户端需要知道外部迭代器才能使用,但是他为客户端提供了更多的控制。客户端创建并维护了更多的控制客户端可以使用不同外部迭代器实现多种类型的遍历。

内部迭代器:

客户端不需要知道任何外部迭代器,而是可以通过集合对象的特殊接口,或者向集合中的每一个元素发送消息。

集合对象本身创建并维护它的外部迭代器

集合对象可以在不修改客户端的情况下,选择不同的外部迭代器。

例子

IteratorExample.png

何时使用

优缺点

优点

缺点

总结

经验法则

上一篇 下一篇

猜你喜欢

热点阅读