设计模式行为型——迭代器模式

什么是迭代器模式

        迭代器模式(Iterator Pattern)属于行为型模式,其提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示,即不需要知道集合对象的底层表示。编程环境中非常常用的设计模式。

迭代器模式的实现

迭代器模式角色

  1. 抽象迭代器角色(Iterator):定义遍历元素所需要的方法,通常包含next()、hasNext()、remove()等。
  2. 具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
  3. 容器角色(Aggregate):一般是接口,定义存储、添加、删除聚合元素以及创建迭代器对象的接口。
  4. 具体容器角色(ConcreteAggregate):抽象容器的具体实现类,实现抽象容器,创建出容器迭代器的对象。

迭代器模式类图

迭代器模式代码实现

抽象迭代器角色

package com.common.demo.pattern.iterator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 抽象迭代器角色 抽象迭代器
 * @date 2023/08/03 22:38:43
 */
public interface Iterator {
    //判断是否还有下一个元素
    boolean hasNext();
    //获取第一个元素
    Object first();
    //获取下一个元素
    Object next();
}

具体迭代器角色

package com.common.demo.pattern.iterator;

import java.util.List;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 具体迭代器角色 对象迭代器
 * @date 2023/08/03 22:39:30
 */
public class ObjectIterator implements Iterator{
    private List list;
    //记录遍历时的位置
    private int position = 0;

    public ObjectIterator(List list) {
        this.list = list;
    }

    @Override
    public boolean hasNext() {
        return position 
  

抽象容器角色

package com.common.demo.pattern.iterator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 抽象聚合/容器角色
 * @date 2023/08/03 22:43:07
 */
public interface Aggregate {
    //添加对象
    void addObject(Object object);
    //移除对象
    void removeObject(Object object);
    //获取迭代器
    Iterator getIterator();
}

具体容器角色

package com.common.demo.pattern.iterator;

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

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 具体聚合/容器角色 对象聚合
 * @date 2023/08/03 22:43:31
 */
public class ObjectAggregate implements Aggregate{

    private List list = new ArrayList<>();

    @Override
    public void addObject(Object object) {
        list.add(object);
    }

    @Override
    public void removeObject(Object object) {
        list.remove(object);
    }

    @Override
    public Iterator getIterator() {
        return new ObjectIterator(list);
    }
}
 
  

测试类

package com.common.demo.pattern.iterator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 测试类
 * @date 2023/08/03 22:44:47
 */
public class Test {
    public static void main(String[] args) {
        //创建聚合对象
        ObjectAggregate objectAggregate = new ObjectAggregate();
        //在聚合对象中填充数据
        objectAggregate.addObject("我是好人一号");
        objectAggregate.addObject("我是好人二号");
        objectAggregate.addObject("我是好人三号");
        //获取迭代器
        Iterator iterator = objectAggregate.getIterator();
        //通过迭代器迭代数据
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

测试截图

设计模式行为型——迭代器模式_第1张图片

迭代器模式的特点

优点

  1. 简化集合遍历代码:迭代器模式可以封装集合对象的遍历过程,使得客户端代码更简洁清晰,无需关心集合对象的内部表示和遍历方式。
  2. 支持多种遍历方式:通过定义不同的迭代器类,可以实现对同一个聚合对象的不同遍历方式,灵活地应对不同的需求。
  3. 封装聚合对象的内部表示:迭代器将遍历操作从聚合对象中抽离出来,使得聚合对象可以更好地封装自己的内部数据结构。

缺点

  1. 增加了系统复杂性:引入迭代器模式将会增加额外的类和接口,增加了系统的复杂性和理解难度。
  2. 需要额外的内存开销:每个迭代器对象都需要占用一定的内存空间,当迭代器数量较多时,会增加系统的内存开销。

使用场景

  1. 需要遍历聚合对象的情况:当需要遍历访问一个聚合对象的元素,并且对外部隐藏其内部表示时,可以考虑使用迭代器模式。
  2. 需要支持多种遍历方式的情况:当同一聚合对象需要支持多种不同的遍历方式时,可以使用迭代器模式来实现。

注意事项

  1. 迭代器模式一般包括迭代器接口和具体迭代器实现类,以及聚合对象和具体聚合对象类。在使用迭代器模式时,需要注意它们之间的关系和协作。
  2. 聚合对象需要提供创建迭代器对象的接口,以便客户端能够获取迭代器对象进行遍历操作。
  3. 注意迭代器对象的生命周期管理,特别是在多线程环境下,需要注意迭代器的线程安全性和一致性。
  4. 考虑迭代器模式的性能影响,尤其是对于大规模数据集合的遍历操作,需要合理评估迭代器模式的适用性和性能开销。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)

你可能感兴趣的:(设计模式,迭代器模式)