1. 首页
  2. 技术文章
  3. 设计模式
  4. 迭代器模式

Technical Articles

技术文章

按专题浏览工程实践与计算机基础内容,也可以用关键词快速检索文章。

Java实现迭代器模式

迭代器模式是一种行为型设计模式,它允许客户端通过迭代器逐个遍历集合对象中的元素,而无需暴露集合的内部表示。该模式将迭代过程封装在一个独立的迭代器对象中,使得客户端可以独立地操作集合对象和迭代器对象。 适用的场景: 1. 当需要遍历一个聚合对象的元素但又不想暴露其内部表示时,可以使用迭代器模式。 2. 当需要在不同的聚合对象上共享元素遍历的逻辑时,可以使用迭代器模式。 3. 当需要提供不同的遍历方式时,可以使用迭代器模式。 该设计模式的主要好处: 1. 分离了集合对象和遍历逻辑,使得代码更加易于维护和扩展。 2. 提供了对不同聚合对象的统一访问接口,增强了代码的灵活性和可复用性。 3. 简化了客户端的使用,使得客户端不需要关心集合对象的内部结构。 以下是Java完整样例代码: ```java // 迭代器接口 interface Iterator<T> { boolean hasNext(); T next(); } // 聚合接口 interface Aggregate { Iterator<String> createIterator(); } // 具体迭代器实现 class ConcreteIterator implements Iterator<String> { private String[] names; private int position; public ConcreteIterator(String[] names) { this.names = names; this.position = 0; } public boolean hasNext() { return position < names.length; } public String next() { if (!hasNext()) { throw new NoSuchElementException(); } String name = names[position]; position++; return name; } } // 具体聚合实现 class ConcreteAggregate implements Aggregate { private String[] names; public ConcreteAggregate(String[] names) { this.names = names; } public Iterator<String> createIterator() { return new ConcreteIterator(names); } } public class IteratorPatternDemo { public static void main(String[] args) { String[] names = {"Alice", "Bob", "Charlie", "David"}; Aggregate aggregate = new ConcreteAggregate(names); Iterator<String> iterator = aggregate.createIterator(); while (iterator.hasNext()) { String name = iterator.next(); System.out.println(name); } } } ``` 在上述代码中,我们定义了一个迭代器接口(Iterator)和一个聚合接口(Aggregate)。具体的迭代器(ConcreteIterator)和聚合(ConcreteAggregate)实现了对应的接口。 在`IteratorPatternDemo`的主方法中,我们通过创建一个具体的聚合对象(ConcreteAggregate)来获取一个迭代器对象(ConcreteIterator)。然后使用迭代器来遍历聚合对象中的元素,最后输出每个元素的名称。

继续阅读
使用Python实现迭代器模式

迭代器模式是一种行为设计模式,它提供一种方法来顺序访问一个容器对象中的元素,而不需要暴露该对象的内部表示。在Python中,可以使用生成器和迭代器协议来实现迭代器模式。 以下是一个使用Python实现迭代器模式的示例代码: ```python class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration value = self.data[self.index] self.index += 1 return value # 使用迭代器 my_list = [1, 2, 3, 4, 5] my_iterator = MyIterator(my_list) for item in my_iterator: print(item) ``` 在示例代码中,我们定义了一个`MyIterator`类,它接受一个数据列表作为输入,然后实现了`__iter__`和`__next__`方法。`__iter__`方法返回迭代器本身,而`__next__`方法用于返回容器对象中的下一个元素。 接下来,我们创建了一个`my_list`列表,并将其传递给`MyIterator`类的实例化对象`my_iterator`。然后,我们使用`for`循环遍历`my_iterator`对象,迭代器会返回`my_list`中的每个元素,并打印出来。 在这个例子中,我们成功地使用Python实现了迭代器模式,通过迭代器对象顺序访问容器对象的每个元素,而无需暴露容器对象的内部表示。

继续阅读