迭代器模式
学习了设计模式中的迭代器模式,看了一些博客,理解以后,做个笔记进行总结。
至于迭代器模式的优点和缺点,网上有一堆,这篇博客就说说使用迭代器模式是什么样子,怎么使用吧。
迭代器模式里有4个角色:
1.抽象迭代器,换句话说就是可以有具体的迭代器实现它。一般来说会有这么两个方法:取得下一个元素的方法next()和判断是否遍历结束的方法hasNext()
2.具体迭代器,就是实现抽象迭代器
3.抽象容器, 一般是一个接口,提供一个iterator()方法
4.具体容器
这里要举个例子说明一下:有个盆或者缸(这两个当然就是具体容器啦),里面有很多东西,当要遍历查看里面的东西时,需要勺子或者筷子(这两个就是具体迭代器了)去查看,这就是迭代器模式的基本内容
用代码说话:
首先,是一个抽象迭代器
/** * 抽象迭代器,可以认为是勺子啊、筷子啊、叉子啊等等 * @author Administrator * */ public interface Iterator { boolean hasNext(); Object next(); }
然后,是抽象容器
/** * 抽象容器,比如缸,盆,碗等等,里面装的东西就是Object * @author Administrator * */ public interface RongQi { public void add(Object obj); public Object get(int index); public Iterator iterator(); public int getSize(); }
再然后,是具体迭代器和具体容器
/** * 具体迭代器,勺子。遍历容器里的Object那些内容 * @author Administrator * */ public class ShaoZi implements Iterator { private RongQi rq; private int index; public ShaoZi(RongQi rongqi) { this.rq = rongqi; } @Override public boolean hasNext() { // TODO Auto-generated method stub if(index >= rq.getSize()) { return false; }else { return true; } } @Override public Object next() { // TODO Auto-generated method stub Object object = rq.get(index); index++; return object; } }
/** * 具体容器,碗。里面装的东西都是Object * @author Administrator * */ public class Wan implements RongQi{ private Object[] rongqi; private int size = 0; private int index = 0; public Wan() { index = 0; size = 0; rongqi = new Object[100]; } @Override public void add(Object obj) { // TODO Auto-generated method stub rongqi[index++] = obj; size++; } @Override public Object get(int index) { // TODO Auto-generated method stub return rongqi[index]; } @Override public Iterator iterator() { // TODO Auto-generated method stub return new ShaoZi(this); } @Override public int getSize() { // TODO Auto-generated method stub return size; } }
最后,是主程序
public class MainApp { public static void main(String[] args) { // 新建一个容器,碗,往里面加上a,B,c RongQi rq = new Wan(); rq.add("a"); rq.add("B"); rq.add("c"); // 这是容器碗的迭代器---勺子 Iterator it = rq.iterator(); // 用勺子遍历碗里面的东西 while(it.hasNext()) { System.out.println(it.next()); } } }
运行结果为:
a
B
c
以上就是迭代器模式简单的例子,还要继续学习下去。。