`

设计模式回顾之十二:迭代器模式(Iterator)

 
阅读更多

设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

迭代器模式(Iterator)

提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。

适用于:

访问一个聚合对象的内容而无需暴露它的内部表示。 

支持对聚合对象的多种遍历。 

为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)。 

 

程序实现:

节点数据结构

public class Node {
	private String name;
	
	public Node(String name){
		this.name=name;
	}
	
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}
}

聚合数据结构

public class NodeCollection {
	private ArrayList<Node> list = new ArrayList<Node>();
	private int nodeMax = 0;
	
	public void addNode(Node n){
		list.add(n);
		nodeMax++;
	}
	public Node getNode(int i){
		return list.get(i);
	}
	public int getMaxNum(){
		return nodeMax;
	}
}

迭代子抽象类:

public abstract class Iterator {
	abstract public Node next();
	abstract public boolean hasNext();
}

具体类,一个反向迭代器:

public class ReverseIterator extends Iterator{
	private NodeCollection nodeCollection;
	private int currentIndex;
	
	public ReverseIterator(NodeCollection nc){
		this.nodeCollection=nc;
		this.currentIndex=nc.getMaxNum()-1;
	}
	@Override
	public Node next() {
		return(nodeCollection.getNode(currentIndex--));
	}
	@Override
	public boolean hasNext() {
		if (currentIndex == -1) return false;
		return true;
	}
}

客户端调用:

public static void main(String[] args) {
		NodeCollection c = new NodeCollection();
		c.addNode(new Node("A"));
		c.addNode(new Node("B"));
		c.addNode(new Node("C"));
		ReverseIterator ri = new ReverseIterator(c);
		while(ri.hasNext()){
			Node node = ri.next();
			System.out.println("node name:"+node.getName());
		}
}

 

其实这个模式也会经常用到,例如使用Java集合框架中的Iterator接口遍历各种collection时。

 

分享到:
评论

相关推荐

    《设计模式:可复用面向对象软件的基础》英文版

    例如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    3. 行为型模式:这类模式关注对象间的交互和职责分配,包括策略(Strategy)、模板方法(Template Method)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录...

    侯捷2015设计模式课件-同济

    3. 行为型模式(Behavioral Patterns):涉及到对象之间的通信,例如责任链(Chain of Responsibility)、命令(Command)、解释器(Interpreter)、迭代器(Iterator)、中介者(Mediator)、备忘录(Memento)、...

    11-回顾和总结(1).html

    在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...

    追MM与23种设计模式

    迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问集合中的元素,而又不暴露集合的内部表示。在“追MM”的过程中,可以通过迭代器模式来管理不同阶段的追求行动,确保每个阶段都按计划进行。 #### 17. ...

    算法导论 DesignPatterns Gof

    - **行为型模式**:关注对象之间的交互以及分配职责的方式,如责任链(Chain of Responsibility)、命令(Command)、解释器(Interpreter)、迭代器(Iterator)、中介者(Mediator)、备忘录(Memento)、观察者(Observer)、...

    以轻松的语言比喻了java的23种模式

    迭代器模式是一种行为型设计模式,它允许你顺序遍历聚合对象的所有元素,而无需暴露对象的内部结构。 **比喻理解:** 假设你参加了一个大型的聚会,现场有很多MM。你想要依次和每一位MM打招呼,但是你并不清楚她们...

    DesignPattern.rar

    行为型模式则着重于对象之间的交互和职责分配,如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、责任链(Chain of Responsibility)、命令(Command)、迭代器(Iterator)、访问者(Visitor...

    designPattern

    3. **行为型模式**:这类模式主要关注对象间的交互和责任分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、责任链模式...

    Building Java Programs A Back to Basics Approach (2nd Edition) .pdf 下载.rar

    12. **集合框架**:学习ArrayList、LinkedList、HashSet、HashMap等集合类的使用,理解迭代器(Iterator)和泛型的概念。 13. **多线程**:理解线程的基本概念,创建和管理线程,使用synchronized关键字实现线程...

    java学习路线

    - 掌握接口如List、Set、Map,以及迭代器(Iterator)和枚举(Enumeration)的使用。 **3. 界面编程(了解)** - **AWT**:了解基本的窗口和组件,如Frame、Button、Label等。 - **事件机制**:理解事件监听和...

    Python快速教程-Vamei-pdf版

    - **循环对象**:讲解如何利用迭代器(iterator)和生成器(generator)等特性优化循环的性能。 - **函数对象**:解释函数作为对象的概念,包括高阶函数(higher-order function)的应用。 - **错误处理**:介绍异常处理...

    我的php学习笔记(毕业设计)

    总体来说,本篇PHP学习笔记包含了PHP的基本语法、面向对象编程的高级特性、设计模式的实际应用以及数据的序列化与反序列化等内容,这些内容是构建PHP应用程序时不可或缺的部分。对于想要学习PHP或者加深对PHP理解的...

    python-cheatsheet.pdf

    1. 数据结构(Collections):包括列表(List)、字典(Dictionary)、集合(Set)、元组(Tuple)、范围对象(Range)、枚举对象(Enumerate)、迭代器(Iterator)和生成器(Generator)。 2. 数据类型(Types)...

    C#程序单词注释汇总

    - 数据库设计中的一种概念,用于描述表、字段等结构。 46. **TableCells**: - 表格单元格。 - 表格中的最小数据单位。 47. **CaseWhenThen**: - CASE WHEN THEN。 - SQL查询中的结构,用于根据条件返回不同的...

    06 You Don't Know JS:ES6 & Beyond.pdf

    - 讨论生成器函数如何配合迭代器协议共同使用。 3. **Modules 模块** - 探讨ES6模块系统的设计理念及其与CommonJS、AMD等模块化方案的区别。 - 分析ES6模块如何促进代码组织和重用。 4. **Classes 类** - ...

Global site tag (gtag.js) - Google Analytics