GoF设计模式(十六) - 迭代器模式
Posted 让程序飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GoF设计模式(十六) - 迭代器模式相关的知识,希望对你有一定的参考价值。
前言
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。该模式属于行为型模式。
模式所涉及的角色
- 抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。
- 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
- 抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方法remove(),
- 迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。
代码实现
迭代器接口
public interface Iterator
/**
* 获取第一元素
* @return Object
*/
Object first();
/**
* 获取下一个元素
* @return Object
*/
Object next();
/**
* 是否存在下一个
* @return Object
*/
boolean hasNext();
/**
* 移除元素
*/
void remove();
迭代器实现
public class ConcreteIterator implements Iterator
private List list = new ArrayList();
private int cursor =0;
public ConcreteIterator(List list)
this.list = list;
@Override
public Object first()
return this.list.get(0);
@Override
public Object next()
Object obj = null;
if(this.hasNext())
obj = this.list.get(cursor++);
return obj;
@Override
public boolean hasNext()
return cursor != this.list.size();
@Override
public void remove()
if (cursor == 0)
this.list.remove(cursor);
return;
this.list.remove(--cursor);
抽象容器
public interface Aggregate
/**
* 添加
* @param obj Object
*/
void add(Object obj);
/**
* 删除
* @param obj Object
*/
void remove(Object obj);
/**
* 创建迭代器
* @return Iterator
*/
Iterator createIterator();
具体容器
public class ConcreteAggregate implements Aggregate
private List list = new ArrayList();
@Override
public void add(Object obj)
list.add(obj);
@Override
public void remove(Object obj)
list.remove(obj);
@Override
public Iterator createIterator()
return new ConcreteIterator(list);
@Override
public String toString()
return Arrays.toString(list.toArray());
客户端
@Test
void contextLoads()
Aggregate ag = new ConcreteAggregate();
ag.add("张三");
ag.add("李四");
ag.add("王五");
Iterator iterator = ag.createIterator();
while(iterator.hasNext())
String str = (String)iterator.next();
System.out.println(str);
@Test
public void contextLoads1()
Aggregate ag = new ConcreteAggregate();
ag.add("张三");
ag.add("李四");
ag.add("王五");
Iterator iterator = ag.createIterator();
while(iterator.hasNext())
String str = (String)iterator.next();
if ("王五".equals(str))
iterator.remove();
System.out.println(ag);
源码
https://download.csdn.net/download/javanbme/84992832
以上是关于GoF设计模式(十六) - 迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章