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】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
2天前
|
Java
Java面向对象实践小结(含面试题)(下)
Java面向对象实践小结(含面试题)(下)
10 1
|
2天前
|
设计模式 Java
Java面向对象实践小结(含面试题)(上)
Java面向对象实践小结(含面试题)
12 1
|
3天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
19 2
|
3天前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
9 1
|
3天前
|
设计模式 Java
Java 设计模式:工厂模式与抽象工厂模式的解析与应用
【4月更文挑战第27天】设计模式是软件开发中用于解决常见问题的典型解决方案。在 Java 中,工厂模式和抽象工厂模式是创建型模式中非常核心的模式,它们主要用于对象的创建,有助于增加程序的灵活性和扩展性。本博客将详细介绍这两种模式的概念、区别以及如何在实际项目中应用这些模式。
7 1
|
4天前
|
JavaScript 前端开发 Java
【JAVA面试题】什么是引用传递?什么是值传递?
【JAVA面试题】什么是引用传递?什么是值传递?
|
6天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
6天前
|
Java
[Java 面试题] ArrayList篇
[Java 面试题] ArrayList篇
|
6天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式