行为模式3.迭代器模式

打印 上一主题 下一主题

主题 1404|帖子 1404|积分 4212

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 行为型模式


  • 模板方法模式(Template Method Pattern)
  • 下令模式(Command Pattern)
  • 迭代器模式(Iterator Pattern)
  • 观察者模式(Observer Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 表明器模式(Interpreter Pattern)
  • 状态模式(State Pattern)
  • 战略模式(Strategy Pattern)
  • 职责链模式(Chain of Responsibility Pattern)
  • 访问者模式(Visitor Pattern)
迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种次序访问聚集对象元素的方式,而不暴露聚集的内部结构。迭代器模式允许客户端按次序访问聚集中的元素,而无需直接访问聚集本身。通常,当你有一个聚集(如列表、队列、栈等),你盼望对聚集中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。
迭代器模式的主要组成部分


  • Iterator(迭代器):迭代器接口,界说了遍历聚集元素的方法,如 hasNext() 和 next()。
  • ConcreteIterator(具体迭代器):实现了Iterator接口,并界说了怎样遍历具体聚集中的元素。
  • Aggregate(聚合类,也叫聚集类):聚集接口,提供创建迭代器对象的方法。
  • ConcreteAggregate(具体聚合类):实现了Aggregate接口,界说了怎样存储和获取聚集元素。
迭代器模式的工作流程


  • 创建迭代器:客户端通过聚合类获取迭代器实例。
  • 遍历聚集:客户端通过迭代器的方法遍历聚集中的元素,使用 hasNext() 判定是否有下一个元素,使用 next() 获取当前元素。
  • 不暴露聚集的内部实现:迭代器模式让客户端可以或许通过标准的接口访问聚集元素,而不需要知道聚集的内部结构。
迭代器模式的长处



  • 封装性:聚集的实现细节对客户端是隐蔽的,客户端不需要关心聚集怎样存储数据。
  • 灵活性:可以对不同的聚集范例使用雷同的迭代方式。
  • 单一职责:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免聚集类本身过于复杂。
Java 示例代码

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. // 1. 定义Iterator接口
  4. interface Iterator {
  5.     boolean hasNext();  // 判断是否有下一个元素
  6.     Object next();      // 获取下一个元素
  7. }
  8. // 2. 定义Aggregate接口(集合接口)
  9. interface Aggregate {
  10.     Iterator createIterator();  // 创建一个迭代器
  11. }
  12. // 3. ConcreteIterator(具体迭代器)实现Iterator接口
  13. class ConcreteIterator implements Iterator {
  14.     private List<Object> items;
  15.     private int position = 0;
  16.     public ConcreteIterator(List<Object> items) {
  17.         this.items = items;
  18.     }
  19.     @Override
  20.     public boolean hasNext() {
  21.         return position < items.size();
  22.     }
  23.     @Override
  24.     public Object next() {
  25.         if (this.hasNext()) {
  26.             return items.get(position++);
  27.         }
  28.         return null;
  29.     }
  30. }
  31. // 4. ConcreteAggregate(具体集合类)实现Aggregate接口
  32. class ConcreteAggregate implements Aggregate {
  33.     private List<Object> items = new ArrayList<>();
  34.     public void addItem(Object item) {
  35.         items.add(item);
  36.     }
  37.     @Override
  38.     public Iterator createIterator() {
  39.         return new ConcreteIterator(items);
  40.     }
  41. }
  42. // 5. 客户端使用迭代器遍历集合
  43. public class IteratorPatternDemo {
  44.     public static void main(String[] args) {
  45.         // 创建一个具体的集合
  46.         ConcreteAggregate aggregate = new ConcreteAggregate();
  47.         aggregate.addItem("Item 1");
  48.         aggregate.addItem("Item 2");
  49.         aggregate.addItem("Item 3");
  50.         aggregate.addItem("Item 4");
  51.         // 创建迭代器
  52.         Iterator iterator = aggregate.createIterator();
  53.         // 使用迭代器遍历集合
  54.         while (iterator.hasNext()) {
  55.             System.out.println(iterator.next());
  56.         }
  57.     }
  58. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表