【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类图

在这里插入图片描述

实现代码

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

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());
	  }
   }
}


运行结果展示:

在这里插入图片描述

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值