大清晨,发一篇博文提提神吧。
在软件开发过程中,经常需要将某一类的对象放在一个集合里,或者放在容器里,这个时候通常需要对集合或容器里的对象进行访问,很明显,对容器或集合里的对象访问必然涉及遍历,这就是迭代器模式。
迭代器角色负责定义访问和遍历元素的接口,它的示例代码如下:
Iterator.java
public interface Iterator {
void Next();
void First();
void Currentitem();
void IsDone();
}
具体迭代器角色实现迭代器接口,并要记录中的当前位置,示意代码如下:
ConcreteIterator.java
package com.devin.iterator;
/**
* @author 作者:ldw E-mail: csu.ldw@csu.edu.cn
* @version 创建时间:2015年4月26日 下午12:57:20
* 类说明
*/
public class ConcreteIterator implements Iterator{
private ConcreteAggregate concreteAggregate;
@Override
public void Next() {
}
@Override
public void First() {
}
@Override
public void Currentitem() {
}
@Override
public void IsDone() {
}
}
容器角色负责提供创建具体迭代器角色的接口,示意代码如下:
Aggregate.java
public interface Aggregate {
Iterator createIterator();
}
具体容器角色实现创建具体迭代器角色的接口,这个具体迭代器角色和该容器的结构相关,它的示意代码如下:
ConcreteAggregate.java
public class ConcreteAggregate implements Aggregate{
@Override
public Iterator createIterator() {
return new ConcreteIterator();
}
}
对于公交售票系统来说,不管是谁上车,都要刷卡的,每张卡里有多少金额,刷卡的里程都是要通过系统进行判断的。此时使用迭代器模式就比较好,首先定义公交车类:
公交车类Bus.java
package com.devin.iterator.test;
/**
* @author 作者:ldw E-mail: csu.ldw@csu.edu.cn
* @version 创建时间:2015年4月26日 下午1:14:48
* 类说明
*/
public class Bus {
private String name;
public Bus(String name){
this.name = name;
}
public String getName(){
return name;
}
}
定义迭代器类Iterator.java
package com.devin.iterator.test;
/**
* @author 作者:ldw E-mail: csu.ldw@csu.edu.cn
* @version 创建时间:2015年4月26日 下午1:15:38
* 类说明
*/
public interface Iterator {
public boolean hasNext();
public Object next();
}
定义迭代器的公交车类BusIterator.java
package com.devin.iterator.test;
/**
* @author 作者:ldw E-mail: csu.ldw@csu.edu.cn
* @version 创建时间:2015年4月26日 下午1:16:29
* 类说明
*/
public class BusIterator implements Iterator {
private BusList list;
private int count;
public BusIterator(BusList list) {
this.list = list;
this.count = list.count();
}
@Override
public boolean hasNext() {
boolean flag = true;
if(count==0){
flag = false;
}else {
flag = true;
}
return flag;
}
@Override
public Object next() {
Bus bus;
bus = list.getList().get(--count);
return bus;
}
}
定义公交的集合类BusList.java
package com.devin.iterator.test;
import java.util.ArrayList;
import java.util.List;
/**
* @author 作者:ldw E-mail: csu.ldw@csu.edu.cn
* @version 创建时间:2015年4月26日 下午1:16:55
* 类说明
*/
public class BusList {
private List<Bus> list = new ArrayList<Bus>();
private int count;
public void add(Bus bus){
list.add(bus);
count++ ;
}
public void remove(Bus bus) {
list.remove(bus);
count--;
}
public int count(){
return count;
}
public List<Bus> getList(){
return list;
}
public Iterator createIterator(){
return new BusIterator(this);
}
}
Client.java
package com.devin.iterator.test;
/**
* @author 作者:ldw E-mail: csu.ldw@csu.edu.cn
* @version 创建时间:2015年4月26日 下午1:23:13 类说明
*/
public class Client {
public static void main(String[] args) {
Bus bus1 = new Bus("张三那");
Bus bus2 = new Bus("lisi");
BusList busList = new BusList();
busList.add(bus1);
busList.add(bus2);
Iterator it = busList.createIterator();
while(it.hasNext()){
System.out.println(((Bus)it.next()).getName());
}
}
}
原文地址:http://blog.csdn.net/dream_angel_z/article/details/45664933