8、迭代器模式
一、迭代器模式概念:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
二、迭代器的角色构成
(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()); } } }