设计模式之迭代器模式
来源:互联网 发布:舰娘国服 知乎 编辑:程序博客网 时间:2024/06/05 15:34
简介
迭代器模式(Iterator Pattern):它提供一种方法访问一个容器对象的各个元素,而不需要暴露该对象的内部细节。该模式目前已经是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发。
优点:
- 它支持以不同的方式遍历一个聚合对象。
- 迭代器简化了聚合类。
- 在同一个聚合上可以有多个遍历。
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点:
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
类图
Iterator抽象迭代器:负责定义访问和遍历元素接口;
ConcreteIterator具体迭代器:实现迭代器接口,完成元素的遍历;
Aggregate抽象容器:负责提供创建具体迭代器角色的接口;
ConcreteAggregate具体容器:实现容器接口定义的方法,创建出容纳迭代器的对象
java实现
创建抽象的或者迭代器接口
public interface Iterator { //遍历到下一个元素 Object next(); //是否已经遍历到尾部 boolean hsaNext(); //删除当前指向的元素 boolean remove(); }
实现类
public class ConcreteIterator implements Iterator{ private Vector vector = new Vector(); //当前游标 public int cursor = 0; public ConcreteIterator(Vector vector){ this.vector = vector; } @Override public Object next() { Object result; if(this.hsaNext()){ result = this.vector.get(this.cursor++); }else{ result = null; } return result; } @Override public boolean hsaNext() { if (this.cursor == this.vector.size()){ return false; }else { return true; } } @Override public boolean remove() { this.vector.remove(this.cursor); return true; } }
创建容器:
public interface Aggregate { //添加元素 void add(Object object); //删除元素 void remove(Object object); //遍历所有元素 Iterator iterator(); }
public class ConcreteAggregate implements Aggregate { private Vector vector = new Vector(); @Override public void add(Object object) { this.vector.add(object); } @Override public void remove(Object object) { this.vector.remove(object); } @Override public Iterator iterator() { return new ConcreteIterator(this.vector); } }
场景类:
public class Client { public static void main(String[] args){ //声明容器 Aggregate aggregate = new ConcreteAggregate(); //存放数据 aggregate.add("aaaaaaaa"); aggregate.add("bbbbbbb"); aggregate.add("ccccc"); aggregate.add("dddd"); //获取迭代器并且遍历 Iterator iterator = aggregate.iterator(); while (iterator.hsaNext()){ System.out.println(iterator.next()); } } }
阅读全文
0 0
- 设计模式之迭代器模式
- 设计模式之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之--迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之-迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式 之 迭代器模式
- 设计模式 之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- C primer plus 第四章总结
- 安卓应用升级、捕捉异常上报、运营统计
- 读
- 设计模式之适配器模式
- AT24CXX、DS1302、红外HS0038 20170610 周六
- 设计模式之迭代器模式
- 简单编码
- 对比get方法和post方法?
- 迷津叹 其二
- eclipse下测试struts2的要点
- 读书笔记--InnoDB数据字典
- Linux 命名管道FIFO
- 我该拿什么拯救你,我的CSDN
- Kotlin与Android的简单尝试