欢迎大家来到IT世界,在知识的湖畔探索吧!
导引
本篇快速地讲解一下设计模式中行为类的迭代器模式(Iterator Pattern),快速来掌握一下其意图场景及代码结构模式。
模式意图
提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。
应用场景
1 访问一个聚合的对象,而不需要暴露对象的内部表示
2 支持对聚合对象的多种遍历
3 对遍历不同的对象,提供统一的接口。
模式结构
代码构成
Iterator 定义访问的接口
/** * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 * @author admin * */ interface Iterator{ void first(); void next(); boolean isDone(); Object currentItem(); }
欢迎大家来到IT世界,在知识的湖畔探索吧!
ConcreteIterator 具体的迭代器,跟踪聚合内的元素
欢迎大家来到IT世界,在知识的湖畔探索吧!/** * 具体的迭代类 * @author admin * */ class ConcreteIterator implements Iterator{ private ConreteAggregate agg; private int index = 0; private int size = 0; public ConcreteIterator(ConreteAggregate agg) { this.agg = agg; size = agg.size(); index = 0; } public void first() { index = 0; } public void next() { if(index < size){ index++; } } public boolean isDone() { return (index >= size); } public Object currentItem() { return agg.getElement(index); } }
Aggregate 提供聚合的接口
/** * 聚合的类 * @author admin * */ abstract class Aggregate{ public Iterator createIterator(){ return null; } }
ConcreteAggregate 具体的聚合
欢迎大家来到IT世界,在知识的湖畔探索吧!/** * 具体的聚合对象,拥有大小,创建迭代子等函数 * @author admin * */ class ConreteAggregate extends Aggregate{ private Object[] obj = {"test1","test2","test3","test4"}; public Iterator createIterator(){ return new ConcreteIterator(this); } public Object getElement(int index){ if(index < obj.length){ return obj[index]; }else{ return null; } } public int size(){ return obj.length; } }
完整代码
package com.nd.Iterator; /** * 聚合的类 * @author admin * */ abstract class Aggregate{ public Iterator createIterator(){ return null; } } /** * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 * @author admin * */ interface Iterator{ void first(); void next(); boolean isDone(); Object currentItem(); } /** * 具体的聚合对象,拥有大小,创建迭代子等函数 * @author admin * */ class ConreteAggregate extends Aggregate{ private Object[] obj = {"test1","test2","test3","test4"}; public Iterator createIterator(){ return new ConcreteIterator(this); } public Object getElement(int index){ if(index < obj.length){ return obj[index]; }else{ return null; } } public int size(){ return obj.length; } } /** * 具体的迭代类 * @author admin * */ class ConcreteIterator implements Iterator{ private ConreteAggregate agg; private int index = 0; private int size = 0; public ConcreteIterator(ConreteAggregate agg) { this.agg = agg; size = agg.size(); index = 0; } public void first() { index = 0; } public void next() { if(index < size){ index++; } } public boolean isDone() { return (index >= size); } public Object currentItem() { return agg.getElement(index); } } /** * 客户端 使用方法 * @author admin * */ public class Client { private Iterator it; private Aggregate agg = new ConreteAggregate(); public void operation(){ it = agg.createIterator(); while(!it.isDone()){ System.out.println(it.currentItem().toString()); it.next(); } } public static void main(String[] args) { Client client = new Client(); client.operation(); } }
运行结果
test1 test2 test3 test4
总结
本篇是关于迭代器模式的简明扼要的介绍,主要是掌握好其意图场景和代码实现的结构模式。当然,还可以有各种迭代的具体实现,比如指定范围迭代等——主要是基于工具的需要或实际业务的需要来具体考量其实现。代码简单明了。
那本篇到此为止,助你学习进步,天天开心。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/33611.html