迭代器模式

迭代器模式

迭代器(Iterator)模式:提供一个对象(迭代器)来顺序访问聚合对象(迭代数据)中的一系列数据,而不暴露聚合对象的内部表示。

现实开发中,我们几乎无需编写迭代器,基本数据结构链表、树、图的迭代器已经都有了。除非要重写迭代逻辑

案例

java 复制代码
public abstract class BeautifulMan {

    //不方便暴露给外界的集合。只允许外界获取而不可以操作
    private List<String> girlFriends = new ArrayList<>();

    void likeYou(String name){
        girlFriends.add(name);
    };
    void sayBye(String name){
        girlFriends.remove(name);
    };

    /**
     * 获取迭代器
     * @return
     */
    public Itr getIterator(){
        return new Iterator();
    }

    /**
     * 具体迭代器
     */
    class Iterator implements Itr{

       private int cursor = 0; //当前指针


       public boolean hasNext(){
           return cursor < girlFriends.size();
       }

       public String next(){
           //第一次调用返回第一个数据
           //下一次再调用自动访问下一个数据
           String s = girlFriends.get(cursor);
           cursor++;
           return s;
       }

        @Override
        public String firstLove() {
            return girlFriends.get(0);
        }

        @Override
        public String current() {
            return girlFriends.get(girlFriends.size()-1);
        }
    }


    /**
     * 抽象迭代器,写在外部该怎么写?
     */
    interface Itr {
        //有没有下一个
        boolean hasNext();
        //返回下一个
        String next();

        //返回初恋(第一个)
        String firstLove();

        //返回现任(最后一个女朋友)
        String current();
    }

}

测试:

java 复制代码
public class MainTest {

    public static void main(String[] args) {

        MaYuCheng cheng = new MaYuCheng();

        cheng.likeYou("王刚");
        cheng.likeYou("李强");
        cheng.likeYou("赵根");


        BeautifulMan.Itr itr = cheng.getIterator();
        String s = itr.firstLove();
        System.out.println(s);

        String current = itr.current();
        System.out.println(current);

        System.out.println("=================");
        while (itr.hasNext()){
            String next = itr.next();
            System.out.println(next);
        }
    }
}
相关推荐
(>_<)2 分钟前
java minio 分片上传工具类与测试demo
java·minio·分片上传
不想打工的码农2 分钟前
MyBatis-Plus多数据源实战:被DBA追着改配置后,我肝出这份避坑指南(附动态切换源码)
java·后端
Coder_Boy_18 分钟前
Deeplearning4j+ Spring Boot 电商用户复购预测案例
java·人工智能·spring boot·后端·spring
踢足球092926 分钟前
寒假打卡:2026-2-7
java·开发语言·javascript
闻哥29 分钟前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
金牌归来发现妻女流落街头30 分钟前
【Springboot基础开发】
java·spring boot·后端
考琪1 小时前
Nginx打印变量到log方法
java·运维·nginx
wangjialelele1 小时前
Linux中的进程管理
java·linux·服务器·c语言·c++·个人开发
历程里程碑1 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
晔子yy1 小时前
如何设计让你的程序同时处理10w条数据
java