【学习笔记】设计模式-迭代器模式(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篇设计模式文章发布完成之后,我会公开完整的思维导图,点关注,不迷路

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五条Programmer

比心~

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

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

打赏作者

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

抵扣说明:

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

余额充值