欢迎大家来到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