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

相关文章
|
14天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
44 2
|
2天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
24 14
|
18天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
24天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
20天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
43 4
|
21天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
72 4
|
17天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
17 0
|
12天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
26 4
|
6月前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
65 4