设计模式(Java随笔)—迭代器模式

xiaoxiao2025-11-14  6

迭代器模式(Iterator Pattern):最常被使用的几个模式之一,被广泛的应用到Java API中,如Java集合(Collection)框架中,就有用迭代器来遍历集合中的元素(在Java开发中,尽量不要自己写迭代器模,使用Java API提供的Iterator一般就能满足项目要求)

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying respresentation.

提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。

迭代器模式中的四个角色:

抽象迭代器(Iterator)模式:定义访问和遍历元素的接口具体迭代器(Concrete Iterator)模式:实现抽象迭代器,完成容器元素的遍历抽象聚集(Aggregate)角色:提供保存元素,创建迭代器角色的接口具体聚集(Concrete Aggregate)角色:实现抽象聚集,保存元素,创建迭代器对象

优点:封装遍历算法,使算法独立于聚集角色,客户无需知道聚集对象的类型,即使聚集对象的类型发生变化,也不会影响遍历过程

迭代器模式代码实现(泛型):

import java.util.Vector; public class IteratorModel { /* * 迭代器模式 */ public static void main(String[] args) { //创建聚集对象,并添加元素 Aggregate<String> aggregate=new ConcreteAggregate<String>(); aggregate.add("黯"); aggregate.add("叶"); aggregate.add("你"); aggregate.add("好"); aggregate.add("!"); //创建迭代器对象,遍历元素 Iterator<String> iterator=aggregate.iterator(); while(iterator.hasNext()){ System.out.print(iterator.next()); } } } //抽象迭代器接口 interface Iterator<E>{ public E next();//返回下一个元素 public boolean hasNext();//是否还有下一个元素 } //具体迭代器 class ConcreteIterator<E> implements Iterator<E>{ private Aggregate<E> aggregate=null; private int index; private int size; public ConcreteIterator(Aggregate<E> aggregate) { this.aggregate=aggregate; this.size=aggregate.size(); this.index=0; } @Override public boolean hasNext() { return index<size; } @Override public E next() { return aggregate.get(index++); } } //抽象聚集接口(Aggregate) interface Aggregate<E>{ public void add(E e);//添加元素 public Iterator<E> iterator();//创建迭代器对象 public int size();//元素个数 public E get(int index);//返回指定元素 } //具体聚集 class ConcreteAggregate<E> implements Aggregate<E>{ private Vector<E> vector=new Vector<E>(); @Override public void add(E e) { vector.addElement(e); } @Override public Iterator<E> iterator() { return new ConcreteIterator<E>(this); } @Override public int size() { return vector.size(); } @Override public E get(int index) { if(index<size()) { return vector.get(index); } return null; } }

运行结果:

黯叶你好!

参考书籍:

《大话设计模式》——程杰

《设计模式(Java版)》

参考文档:JDK  API 1.6.0中文版

转载请注明原文地址: https://www.6miu.com/read-5039600.html

最新回复(0)