迭代器模式

迭代器模式

迭代器(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);
        }
    }
}
相关推荐
深栈解码36 分钟前
JMM深度解析(三) volatile实现机制详解
java·后端
liujing102329291 小时前
Day04_刷题niuke20250703
java·开发语言·算法
Brookty1 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
能工智人小辰1 小时前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT1 小时前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
缘来是庄1 小时前
设计模式之外观模式
java·设计模式·外观模式
你是橙子那我是谁1 小时前
设计模式之外观模式:简化复杂系统的优雅之道
设计模式
知其然亦知其所以然2 小时前
JVM社招面试题:队列和栈是什么?有什么区别?我在面试现场讲了个故事…
java·后端·面试
harmful_sheep2 小时前
Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
java·spring·缓存
星辰大海的精灵2 小时前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构