一、概述
迭代器模式(Iterator):迭代器这个词在Java中已经实现,用Iterator迭代器对集合进行遍历,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部方法。
主要体现不暴露内部方法,实际感觉有点太封装了。
角色分析:
A:抽象迭代器接口(Iterator). 定义迭代器的方法与行为。
B:具体迭代器(ConcreteIterator).实现迭代器的方法与行为。
C:抽象聚合接口(Aggregate). 定义聚合类,实际就是有增加、删除数据的集合。
D:具体聚合(ConcreteAggregate),实现聚合类。
E:客户端类(Client)
二、简单例子
A:抽象迭代器接口(Iterator). 定义迭代器的方法与行为。
1 package comm.pattern.action.iterator; 2 3 /** 4 * 5 * @Title: Iterator.java 6 * @Package: comm.pattern.action.iterator 7 * @Description: 迭代器抽象类 8 * @author yangzhancheng 9 * @2020年3月14日:上午12:29:08 10 * 11 */ 12 public interface Iterator { 13 14 //第一个 15 Object first(); 16 17 //下一个 18 Object next(); 19 20 //是否还有下一个 21 boolean hasNext(); 22 23 }
B:具体迭代器(ConcreteIterator).实现迭代器的方法与行为。
1 package comm.pattern.action.iterator; 2 3 import java.util.List; 4 5 /** 6 * 7 * @Title: ConcreteIterator.java 8 * @Package: comm.pattern.action.iterator 9 * @Description: 实现迭代器类 10 * @author yangzhancheng 11 * @2020年3月14日:上午12:28:41 12 * 13 */ 14 public class ConcreteIterator implements Iterator { 15 16 private List<Object> aggreList = null; 17 18 private int index = -1; 19 20 public ConcreteIterator(List<Object> aggreList) { 21 this.aggreList = aggreList; 22 } 23 24 @Override 25 public Object first() { 26 index = 0; 27 Object obj = aggreList.get(index); 28 return obj; 29 } 30 31 @Override 32 public Object next() { 33 Object obj = null; 34 if (this.hasNext()) { 35 obj = aggreList.get(++index); 36 } 37 return obj; 38 } 39 40 @Override 41 public boolean hasNext() { 42 if (index < aggreList.size() - 1) { 43 return true; 44 } else { 45 return false; 46 } 47 } 48 49 }
C:抽象聚合接口(Aggregate). 定义聚合类,实际就是有增加、删除数据的集合。
1 package comm.pattern.action.iterator; 2 3 /** 4 * 5 * @Title: Aggregate.java 6 * @Package: comm.pattern.action.iterator 7 * @Description: 集合类,有增加,删除,主要本身需要引入迭代器 8 * @author yangzhancheng 9 * @2020年3月14日:上午12:24:55 10 * 11 */ 12 public interface Aggregate { 13 14 //增加对象 15 public void add(Object obj); 16 17 //删除对象 18 public void remove(Object obj); 19 20 //初始化迭代器 21 public Iterator iterator(); 22 23 }
D:具体聚合(ConcreteAggregate),实现聚合类。
1 package comm.pattern.action.iterator; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** 7 * 8 * @Title: ConcreteAggregate.java 9 * @Package: comm.pattern.action.iterator 10 * @Description: 实现聚合类 11 * @author yangzhancheng 12 * @2020年3月14日:上午12:28:10 13 * 14 */ 15 public class ConcreteAggregate implements Aggregate{ 16 17 private List<Object> list = new ArrayList<Object>(); 18 19 //增加对象 20 public void add(Object obj){ 21 list.add(obj); 22 } 23 24 25 //删除对象 26 public void remove(Object obj){ 27 list.remove(obj); 28 } 29 30 //初始化迭代器 31 public Iterator iterator(){ 32 return new ConcreteIterator(list); 33 } 34 }
E:客户端类(Client)
1 package comm.pattern.action.iterator; 2 3 /** 4 * 5 * @Title: Client.java 6 * @Package: comm.pattern.action.iterator 7 * @Description: 客户端实现类 8 * @author yangzhancheng 9 * @2020年3月14日:上午12:27:51 10 * 11 */ 12 public class Client { 13 14 public static void main(String[] args) { 15 16 Aggregate ag = new ConcreteAggregate(); 17 ag.add("中山实验小学三年(1)班"); 18 ag.add("中山实验小学三年(2)班"); 19 ag.add("中山实验小学三年(3)班"); 20 21 System.out.println("聚合的内容有:"); 22 23 Iterator it = ag.iterator(); 24 25 while (it.hasNext()) { 26 Object ob = it.next(); 27 System.out.println(ob.toString()); 28 } 29 30 31 } 32 33 }
运行结果
聚合的内容有: 中山实验小学三年(1)班 中山实验小学三年(2)班 中山实验小学三年(3)班
三、总结
java中迭代器的源代码,后续奉献上。
原文:https://www.cnblogs.com/fating/p/12490173.html