迭代器模式 聚合类,聚合对象 电视机遥控器,迭代器,遍历局和对象中的成员 灵活新增遍历方法 将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离。这就是迭代器模式。 灵活性,可扩展性,避免类职责过多 角色 抽象迭代器Iterator 定义访问和遍历数据的接口 具体迭代器ConcreteIterator 实现接口,完成对聚合对象的遍历 通过游标来记录当前位置 抽象聚合类Aggregate 用于存储和管理元素对象,有一个createIterator方法,用于创造迭代器 具体聚合类ConcreteAggregate 实现createIterator方法
看例子,电视遥控器遍历数据
1.迭代器接口,抽象迭代器
package Iterator;
/**
* Created by Jiqing on 2016/10/27.
*/
public interface Television {
TVIterator createIterator();
}
2.电视接口,抽象聚合类
package Iterator;
/**
* Created by Jiqing on 2016/10/27.
*/
public interface Television {
TVIterator createIterator();
}
3.具体聚合类和迭代器类
package Iterator;
/**
* Created by Jiqing on 2016/10/27.
*/
public class TCLTelevision implements Television{
private Object[] obj = {"湖南卫视","北京卫视","上海卫视"};
public TVIterator createIterator() {
return new TCLIterator();
}
class TCLIterator implements TVIterator {
private int currentIndex = 0;
public void next() {
if (currentIndex < obj.length) {
currentIndex ++ ;
}
}
public void previous()
{
if(currentIndex>0)
{
currentIndex--;
}
}
public void setChannel(int i)
{
currentIndex=i;
}
public Object currentChannel()
{
return obj[currentIndex];
}
public boolean isLast()
{
return currentIndex==obj.length;
}
public boolean isFirst()
{
return currentIndex==0;
}
}
}
4.客户端
package Iterator;
/**
* Created by Jiqing on 2016/10/27.
*/
public class Client {
public static void display(Television tv) {
TVIterator i = tv.createIterator();
System.out.println("电视机频道:");
while (!i.isLast()) {
System.out.println(i.currentChannel().toString());
i.next();
}
}
public static void reverseDisplay(Television tv) {
TVIterator i = tv.createIterator();
i.setChannel(3);
System.out.println("逆向遍历电视机频道:");
while(!i.isFirst())
{
i.previous();
System.out.println(i.currentChannel().toString());
}
}
public static void main(String a[])
{
Television tv;
tv= new TCLTelevision();
display(tv);
System.out.println("--------------------------");
reverseDisplay(tv);
}
}
执行结果:
电视机频道:
湖南卫视
北京卫视
上海卫视
--------------------------
逆向遍历电视机频道:
上海卫视
北京卫视
湖南卫视
本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6002502.html,如需转载请自行联系原作者