Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式

简介: Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式

【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】

知识回顾:
>

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】。

迭代器模式

迭代器设计模式:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

解决的问题

不同的方式来遍历整个整合对象。

应用策略模式的场景

遍历一个集合中的所有元素。

生产开发中常用的使用场景

  1. Java中JDK自带的遍历集合元素的迭代器。

迭代器模式优点与缺点

优点

  1. 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点

由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

核心角色

Iterator 接口和一个返回迭代器的 Aggregate接口。实现了 Aggregate接口的实体类将负责实现 Iterator 接口。迭代器主要是遍历对象,聚合接口主要是存储对象。

UML类图

image.png

实现代码

我们举一个常见的栗子吧:就是遍历一个集合中的所有元素。

Iterator 接口

package com.iterator;

public interface MyIterator{
   
   
   public boolean hasNext();
   public Object next();
}

Aggregate接口

package com.iterator;

public interface Aggregate{
   
   
   public MyIterator getIterator();
}

返回Iterator具体的Aggregate类

package com.iterator;

import java.util.List;
import java.util.ArrayList;

public class ConcreteAggregate implements Aggregate{
   
   
   private List<Object> list = new ArrayList<Object>();
   public void addObject(Object obj){
   
   
        this.list.add(obj);
   }
   public void removeObject(Object obj){
   
   
        this.list.remove(obj);
   } 
   @Override
   public MyIterator getIterator() {
   
   
      return new ConcreteIterator();
   }

   private class ConcreteIterator implements MyIterator{
   
   

       //记录遍历的位置
      private int index;

      @Override
      public boolean hasNext() {
   
   
         if(index < list.size()){
   
   
            return true;
         }
         return false;
      }

      @Override
      public Object next() {
   
   
         if(this.hasNext()){
   
   
            return list.get(index++);
         }
         return null;
      }     
   }
}

测试代码

package com.iterator;

public class Main{
   
   

   public static void main(String[] args) {
   
   
      ConcreteAggregate aggregate= new ConcreteAggregate();
       aggregate.addObject("Java");
       aggregate.addObject("Python");
       aggregate.addObject("C++");
       MyIterator iterator=aggregate.getIterator();
      while(iterator.hasNext()){
   
   
        System.out.println(iterator.next());
      }
   }
}

运行结果展示:

image.png

好了,到这里【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】就结束了,23种设计模式持续更新汇总中。

相关文章
|
3天前
|
缓存 安全 Java
三万字长文Java面试题——基础篇(注:该篇博客将会一直维护 最新维护时间:2024年9月18日)
本文是一篇全面的Java面试题指南,涵盖了Java基础、数据类型、面向对象、异常处理、IO流、反射、代理模式、泛型、枚举、Lambda表达式、Stream流等多个方面的知识点,并提供了详细的解析和代码示例。
15 0
三万字长文Java面试题——基础篇(注:该篇博客将会一直维护 最新维护时间:2024年9月18日)
|
16天前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
16天前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
16天前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
1天前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
8 0
|
1天前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
8 0
|
1天前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
8 0
|
3天前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
11 0
|
16天前
|
设计模式 缓存 算法
Java设计模式-访问者模式(22)
Java设计模式-访问者模式(22)
|
4月前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
52 4