一、迭代器模式概念:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
二、迭代器的角色构成
(1)、迭代器角色
(2)、具体迭代器角色
(3)、容器角色
(4)、具体容器角色
三、迭代器模式的优缺点
优点:1、简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但是用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了,而引入了迭代器就简单的多了
2、封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用关心。
3、可以提供多种遍历方法,正序倒序都可以。
缺点:1、对于简单的遍历,使用迭代器会繁琐,像ArrayList,我们宁可使用for循环和get方法来遍历集合
四、实现
package Iterator;
/**
* Created by Administrator on 2018/3/3 0003.
*/
public interface MyList {
public void add(Object object);
public Object get(int index);
public MyIterator iterator();
public int getSize();
}
package Iterator;
/**
* Created by Administrator on 2018/3/3 0003.
*/
public class ConList implements MyList{
Object obj[];
int size=0;
int index=0;
public ConList(){
obj=new Object[100];
}
@Override
public void add(Object object) {
obj[index++]=object;
this.size++;
}
@Override
public Object get(int index) {
if(obj[index]!=null){
return obj[index];
}
return null;
}
@Override
public ConIterator iterator() {
return new ConIterator(this);
}
@Override
public int getSize() {
return this.size;
}
}
package Iterator;
/**
* Created by Administrator on 2018/3/3 0003.
*/
public interface MyIterator {
public boolean hasNext();
public Object Next();
}
package Iterator;
/**
* Created by Administrator on 2018/3/3 0003.
*/
public class ConIterator implements MyIterator{
private int index=0;
private ConList list;
public ConIterator(ConList list){
this.list=list;
}
@Override
public boolean hasNext() {
if(index>=list.size){
return false;
}
return true;
}
@Override
public Object Next() {
Object obj=list.get(index++);
return obj;
}
}
package Iterator;
/**
* Created by Administrator on 2018/3/3 0003.
*/
public class Test {
public static void main(String[] args) {
ConList list=new ConList();
MyIterator iterator=list.iterator();
list.add("asd");
list.add("asdd");
while(iterator.hasNext()){
System.out.println(iterator.Next());
}
}
}
来源:https://www.cnblogs.com/television/p/8525150.html