代刷网网站建设,网站开发需要甲方提供什么,越南注册公司全攻略,seo技术代理目录 二十、设计模式之迭代器模式能帮我们干什么#xff1f;主要解决什么问题#xff1f;优缺点优点缺点#xff1a; 使用的场景角色 实现迭代器模式定义迭代器容器实现可迭代接口迭代器实现使用 总结 二十、设计模式之迭代器模式
所属类型定义行为型提供一种方法顺序访问一… 目录 二十、设计模式之迭代器模式能帮我们干什么主要解决什么问题优缺点优点缺点 使用的场景角色 实现迭代器模式定义迭代器容器实现可迭代接口迭代器实现使用 总结 二十、设计模式之迭代器模式
所属类型定义行为型提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示 能帮我们干什么
主要解决什么问题 主要解决的是 不同的方式来遍历整个整合对象 何时使用遍历一个聚合对象。 优缺点
优点
单一职责原则。通过将体积庞大的遍历算法代码抽取为独立的类可对客户端代码和集合进行整理。开闭原则。可实现新型的集合和迭代器并将其传递给现有代码无需修改现有代码。可以并行遍历同一集合因为每个迭代器对象都包含其自身的遍历状态。 相似的可以暂停遍历并在需要时继续。
缺点
由于迭代器模式将存储数据和遍历数据的职责分离增加新的聚合类需要对应增加新的迭代器类类的个数成对增加这在一定程度上增加了系统的复杂性。 使用的场景
1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。
角色
二、角色组成
抽象迭代器Iterator定义了遍历聚合对象所需的方法包括hashNext()和next()方法等用于遍历聚合对象中的元素。具体迭代器Concrete Iterator它是实现迭代器接口的具体实现类负责具体的遍历逻辑。它保存了当前遍历的位置信息并可以根据需要向前或向后遍历集合元素。抽象聚合器Aggregate 一般是一个接口提供一个iterator()方法例如java中的Collection接口List接口Set接口等。具体聚合器ConcreteAggregate就是抽象容器的具体实现类比如List接口的有序列表实现ArrayListList接口的链表实现LinkListSet接口的哈希列表的实现HashSet等。
实现
如何解决把在元素之间游走的责任交给迭代器而不是聚合对象。 关键代码定义接口hasNext, next。
代码案例 https://gitcode.net/k316378085/Java/-/tree/master/java/com/kongxiang/raindrop/dp/type/behavior/iterator
迭代器模式 容器返回迭代器实例 迭代器由每个容器自己单独实现 实现难度 ⭐️ ⭐️ ⭐️
定义迭代器
/*** 可迭代的。提供一个迭代器实例* param T*/
public interface IterableT{public IteratorT iterator();
}/*** 定义迭代器的两个方法* param T*/
public interface IteratorT {public boolean hasNext();public T next();
}容器实现可迭代接口
public class ListContainerT implements IterableT {private ListT list new ArrayList();Overridepublic IteratorT iterator() {return new ListIterator(this);}public void add(T t ){this.list.add(t);}public T get(int index){return this.list.get(index);}public int size(){return this.list.size();}
}
迭代器实现
public class ListIteratorT implements IteratorT {private ListContainerT list ;public ListIterator(ListContainerT list){this.list list;}private int pointer;Overridepublic boolean hasNext() {return pointer list.size();}Overridepublic T next() {return list.get(pointer);}
}
使用
public static void main(String[] args) {ListContainerInteger listContainer new ListContainer();listContainer.add(1);listContainer.add(2);listContainer.add(3);listContainer.add(6);IteratorInteger iterator listContainer.iterator();while (iterator.hasNext()){Integer next iterator.next();System.out.println(--- : next);}}
总结
迭代器模式Iterator Pattern是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素不需要知道集合对象的底层表示。 迭代器模式就是分离了集合对象的遍历行为抽象出一个迭代器类来负责这样既可以做到不暴露集合的内部结构又可让外部代码透明地访问集合内部的数据。