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种设计模式持续更新汇总中。

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
83 14
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
2月前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
37 6
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
46 2
|
2月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
76 4
|
2月前
|
设计模式 Java Kotlin
Kotlin - 改良设计模式 - 迭代器模式
Kotlin - 改良设计模式 - 迭代器模式
31 0
|
5天前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式