您的位置:首页 > 其它

设计模式(二十一)------23种设计模式(13):迭代器模式

2017-12-13 10:05 204 查看


使用频率:★★★★★



一、什么是迭代器模式

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


二、补充说明

单一职责原则,分离了集合对象的遍历行为,抽象出一个迭代器类来负责;


三、角色

迭代器接口
迭代器具体实现
抽象容器
具体容器


四、例子,JAVA实现

例子说明:使用迭代器遍历容器
迭代器接口

package com.pichen.dp.behavioralpattern.iterator;

public interface Iterator {
public Object first();

public Object previous();

public Object next();

public boolean hasNext();

}


迭代器具体实现

package com.pichen.dp.behavioralpattern.iterator;

import java.util.List;

public class MyIterator implements Iterator{
private List<Object> list;
private int index = 0;

public MyIterator(List<Object> list) {
this.list = list;
}
@Override
public Object previous() {
if((this.index - 1) < 0){
return null;
}else{
return this.list.get(--index);
}

}

@Override
public Object next() {
if((this.index + 1) >= this.list.size()){
return null;
}else{
return this.list.get(++index);
}
}

@Override
public boolean hasNext() {
if(this.index < (this.list.size() - 1)){
return true;
}
return false;
}
/**
* 〈一句话功能简述〉
* 〈功能详细描述〉
* @see com.pichen.dp.behavioralpattern.iterator.Iterator#first()
* @return
*/
@Override
public Object first() {
if(this.list.size() <= 0){
return null;
}else{
return this.list.get(0);
}
}

}


抽象容器

package com.pichen.dp.behavioralpattern.iterator;

public abstract class Container {

public abstract Iterator iterator();

public abstract void put(Object obj);
}


具体容器

package com.pichen.dp.behavioralpattern.iterator;

import java.util.ArrayList;
import java.util.List;

public class MyContainer ex
e15a
tends Container{
private List<Object> list;

public MyContainer() {
this.list = new ArrayList<Object>();
}
@Override
public void put(Object obj){
this.list.add(obj);
}
@Override
public Iterator iterator() {
return new MyIterator(list);
}

}


客户端调用示例

package com.pichen.dp.behavioralpattern.iterator;

public class Main {

public static void main(String[] args) {

//创建一个自定义容器,直接使用ArrayList的实现,仅仅示例作用
Container strContainer = new MyContainer();
strContainer.put("001");
strContainer.put("002");
strContainer.put("003");

Iterator myIterator = strContainer.iterator();
//使用举例
System.out.println("------------------next、hasNext示例------------------");
System.out.println(myIterator.first());
System.out.println(myIterator.next());
System.out.println(myIterator.hasNext());
System.out.println(myIterator.next());
System.out.println(myIterator.hasNext());
System.out.println(myIterator.next());
System.out.println(myIterator.hasNext());

//使用举例
System.out.println("------------------previous、hasNext示例------------------");
System.out.println(myIterator.previous());
System.out.println(myIterator.previous());
System.out.println(myIterator.previous());
System.out.println(myIterator.hasNext());

//使用迭代器遍历
System.out.println("------------------迭代器遍历示例------------------");
System.out.println(myIterator.first());
while(myIterator.hasNext()){
System.out.println(myIterator.next());
}
}
}


结果打印

------------------next、hasNext示例------------------
001
002
true
003
false
null
false
------------------previous、hasNext示例------------------
002
001
null
true
------------------迭代器遍历示例------------------
001
002
003


 

@Author      风一样的码农

@HomePageUrl http://www.cnblogs.com/chenpi/ 

@Copyright      转载请注明出处,谢谢~ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 迭代器