Bootstrap

【学习笔记】设计模式-迭代器模式(Iterator)

0 设计模式

不了解设计模式的小伙伴可以通过这篇文章了解一下什么是设计模式

https://blog.csdn.net/qq_42874315/article/details/120006447?spm=1001.2014.3001.5502

1 迭代器模式

迭代器模式主要用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。主要的作用是在访问一个聚合对象的内容时而无须暴露它的内部表示。

2 实现思路

在这里插入图片描述

创建一个 Iterator 接口和一个返回迭代器的 Container 接口。

实现了 Container 接口的实体类将负责实现 Iterator 接口。

Test类中使用实体类 NamesRepository 来打印 NamesRepository 中存储为集合的 Names。

3 需要的类

  1. 迭代器接口

  2. 面向用户的接口(让用户获取迭代器的)

  3. 实际需要迭代的实体类

    实现面向用户的接口

  4. 实体类的内部迭代器类,实现迭代器接口

    通常会将这个类设置在实体类的内部,制定自己独特的迭代规则

  5. 测试类

    对需要迭代的实体类进行赋值,然后通过用户获取迭代器的接口中的getIterator方法获取迭代器,最后遍历迭代器

4 具体实现

4.1 Iterator(迭代器接口)

/**
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/28 21:02
 */
public interface Iterator {
    boolean hasNext();
    Object next();
}

4.2 Container(用户获取迭代器的接口)

/**
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/28 21:02
 */
public interface Container {
    Iterator getIterator();
}

4.3 NameRepository(实际需要迭代的实体类,实现Container接口)

他还有个内部类:NameIterator

NameIterator:NameRepository的内部迭代器类,实现迭代器接口

/**
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/28 21:03
 */
public class NameRepository implements Container {
    public String[] names;

    public NameRepository(String[] names) {
        this.names = names;
    }

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

    private class NameIterator implements Iterator{
        int index;

        @Override
        public boolean hasNext() {
            if(index < names.length){
                return true;
            }
            return false;
        }

        @Override
        public Object next() {
            if(this.hasNext()){
                return names[index++];
            }
            return null;
        }
    }
}

4.4 测试类

/**
 * @Author ChenJiahao(程序员五条)
 * @Date 2021/8/28 21:05
 */
public class Test {
    public static void main(String[] args) {
        String[] names = {"Robert" , "John" ,"Julie" , "Lora"};
        NameRepository namesRepository = new NameRepository(names);
        for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
            String name = (String)iter.next();
            System.out.println("Name : " + name);
        }
    }
}

5 思维导图

在这里插入图片描述

6 示例源码地址

https://github.com/ChenJiahao0205/design-pattern/tree/master

最后

我是通过马士兵老师的视频和菜鸟教程学习的,部分内容可能会有雷同

想阅读更多设计模式相关文章,欢迎到我的专栏【设计模式学习笔记】、【设计模式】中去查看

在23篇设计模式文章发布完成之后,我会公开完整的思维导图,点关注,不迷路

感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎关注程序员五条

;