Design 迭代器模式
基本介绍
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
迭代器模式属于行为型模式。
特点:提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示
案例图示
迭代器模式分为2个大类,一类用于存储数据(可迭代对象),一类获取迭代时产生的数据(迭代器),迭代器由可迭代对象创建,迭代器中包含可迭代对象中的被迭代数据,每次重新迭代可迭代对象时都会创建一个专属的迭代器,迭代器中的数据被迭代完成后,该迭代器失效:
优缺点
优点:
- 支持以不同的方式遍历一个聚合对象
- 迭代器简化了聚合类
- 在同一个聚合上可以有多个遍历
缺点:
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性
Python实现
用Python实现迭代器模式,其实Python本身已经实现了迭代器模式,并且还支持生成器,通过next()进行调用即可,这里写一个迭代原理:
#! /usr/local/bin/python3
# -*- coding:utf-8 -*-
class IterableClass(object):
"""可迭代对象"""
def __init__(self, *args):
self.args = args
def __iter__(self):
# 被迭代时,创建迭代器对象
return IteratorClass(self.args)
class IteratorClass(object):
"""迭代器"""
def __init__(self, args):
self.args = args
self.index = 0
def __iter__(self):
return self
def __next__(self):
try:
return_value = self.args[self.index]
except IndexError:
raise StopIteration
self.index += 1
return return_value
if __name__ == '__main__':
# 进行迭代
iterable = IterableClass(1, 2, 3, 4)
# 通过迭代对象创建出其迭代器
# 包含迭代对象本身所有元素
iterator = iter(iterable)
# 对迭代器进行迭代
while 1:
try:
print(next(iterator))
except StopIteration:
break
结果如下:
1
2
3
4
Golang实现
用Golang实现迭代器模式:
...