迭代器模式

迭代器模式

迭代器(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);
        }
    }
}
相关推荐
GISer小浪花努力上岸8 分钟前
Java N种内部类
java·开发语言·intellij-idea
凭君语未可24 分钟前
详解前驱图与PV操作
java·网络·算法
Sundayday4724 分钟前
tomcat的安装,管理与配置
java·运维·服务器·nginx·tomcat·云计算
羽X瞳35 分钟前
17、CPU缓存架构详解&高性能内存队列Disruptor实战
java·缓存·架构
咕了个咕35 分钟前
微服务-流量染色
java
一直奔跑在路上36 分钟前
【Prometheus】实战二:Prometheus数据监控自定义组件Pushgateway
java·算法·prometheus
武子康1 小时前
大数据-145 Apache Kudu 架构解读 Master Table 分区 读写
java·大数据·clickhouse·hdfs·架构·apache
程序员张三疯1 小时前
springmvc
java·spring·java-ee·mvc
lucifer3111 小时前
深入理解 Spring Boot 中的事件驱动模型
java·后端
希忘auto1 小时前
详解常见排序
java·排序