JAVA设计模式学习25——迭代器模式
程序员文章站
2022-05-03 19:06:45
...
迭代器 (Iterator)模式:迭代器模式提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。
迭代器模式由以下角色组成:
迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。
具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口。这个具体迭代器角色与该容器的结构相关。
迭代器设计模式结构如如下:
从结构上可以看出,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,而且也使得设计符号“单一职责原则”。
模拟代码如下:
抽象迭代器类:
package designPattern.iterator; public interface Iterator<T> { public T next(); public boolean hasNext(); }
实现迭代器类:
package designPattern.iterator; import java.util.ArrayList; import java.util.List; public class ConcreteIterator<T> implements Iterator<T> { private List<T> list = new ArrayList<T> (); private int cursor =0; public ConcreteIterator(List<T> list){ this.list = list; } public boolean hasNext() { if(cursor==list.size()){ return false; } return true; } public T next() { T obj = null; if(this.hasNext()){ obj = this.list.get(cursor++); } return obj; } }
抽象聚集类:
package designPattern.iterator; public interface Aggregate<T> { public void add(T obj); public void remove(T obj); public Iterator<T> iterator(); }
实现聚集类:
package designPattern.iterator; import java.util.ArrayList; import java.util.List; public class ConcreteAggregate <T>implements Aggregate<T>{ private List <T>list = new ArrayList<T>(); public void add(T obj) { list.add(obj); } public Iterator<T> iterator() { return new ConcreteIterator<T>(list); } public void remove(Object obj) { list.remove(obj); } }
测试类:
package designPattern.iterator; public class Client { public static void main(String[] args){ Aggregate<String> ag = new ConcreteAggregate<String>(); ag.add("red"); ag.add("green"); ag.add("blue"); Iterator<String>it = ag.iterator(); while(it.hasNext()){ String str = (String)it.next(); System.out.println(str); } } }
上面的代码基本上模拟了迭代器模式的实现,当然java中已经完整的实现了所有集合的迭代。迭代器的作用就是把集合的管理和迭代算法分离,体现了单一职责原则,这也是这个模式的主要作用。
设计模式系列目录:
上一篇: JAVA虚拟机之一:垃圾回收(GC)机制
下一篇: mysql数据库类中出现的问题