程序员:我终于知道什么是迭代器模式了

440 阅读4分钟

作者:千绝

邮箱:wl625363199@gmail.com

公众号:千绝

标题:设计模式之迭代器模式(转载请标明出处)

Hello,各位看官老爷们,千绝我回来更新了,最近发生了一件人生大事,导致了我鸽了一个星期,就是千绝看了一周的房,终于靠自己的努力让我的家人帮我买房了(hahaha)相信在座的各位看官老爷们也可以。

好了不开玩笑了,因为千绝年底要结婚了,所以趁现在就去看了一下婚房,我感觉我买房效率还是挺快的,估计遇到我的销售都开心的飞了,我周四晚上联系的房屋销售,周六上午看的房,下午就把首付交了。我媳妇都说节奏太快了,我也感觉节奏挺快的,就这样当了韭菜被房子绑住了,以后再也不能想吃啥就吃啥了,从此背上了房贷。

好了现在回归正题(文末有彩蛋),前面一篇千绝介绍了观察者模式,不知道各位看官老爷看的怎么样,有没有对观察者模式又有了一点新的认识呢,如果有的话那么千绝的目的就达到了,这篇千绝将会介绍设计模式中的迭代器模式,虽然这个模式现在我们大概率不会自己写了,因为java已经做的非常的完善了,但是有一句古话说的好,学习历史,看清方向我们才能更好的前行。

这篇文章千绝会通过一个例子来讲解什么是迭代器模式。

定义

首先惯例我们引用百度百科的内容

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

千绝对这段定义的理解就是:迭代器模式是为了不暴露对象内部使用的是什么数据结构,让外部可以顺序访问对象内部元素的方法

理解还是能理解的,如果不能理解上面的话,千绝会用代码来给你们讲解。

代码

定义一个迭代器的接口

public interface Iterator<T> {
    //返回该对象的第一个元素
    T first();
    //返回该对象的下一个元素
    T next();
    //判断该对象有没有下一个元素
    boolean hasNext();
    //返回该对象现在的元素
    T getCurrentObj();
}

定义一个实现迭代器的类

public class ConcreateIterator<T> implements Iterator<T> {
    List<T> list ;
    int current =0;
    public ConcreateIterator(List<T> list){
        this.list = list;
    }

    @Override
    public T first() {
        return list.get(0);
    }

    @Override
    public T next() {
        T t = null;
        if(this.hasNext()){
            t = list.get(current);
            current ++ ;
        }
        return t;
    }

    @Override
    public boolean hasNext() {
        if(current < list.size()){
            return  true;
        }
        return false;
    }

    @Override
    public T getCurrentObj() {
        return list.get(current);
    }
}

定义一个聚合接口

public  interface Aggregate<T> {
    //添加一个对象
    void add(T t);
    //删除一个对象
    void remove(T t);
    //生成遍历器
    Iterator<T> createIteratory();
}

定义一个实现聚合接口的类

public class ConcreateAggregate<T> implements Aggregate<T> {
    private List<T> list = new ArrayList();

    @Override
    public void add(T t) {
        list.add(t);
    }

    @Override
    public void remove(T t) {
        list.remove(t);
    }

    @Override
    public Iterator createIteratory() {
        return new ConcreateIterator(list);
    }
}

定义一个测试类

public class TestIterator {
    public static void main(String []args){
        ConcreateAggregate<String>  concreateAggregate= new ConcreateAggregate<String>();
        concreateAggregate.add("测试");
        concreateAggregate.add("测试1");
        concreateAggregate.add("测试2");
        concreateAggregate.add("测试3");
        concreateAggregate.add("测试4");
        concreateAggregate.add("测试5");
        concreateAggregate.add("测试6");
        concreateAggregate.remove("测试4");
        Iterator iterator = concreateAggregate.createIteratory();
        System.out.println("第一个是:" + iterator.first());
        System.out.println("当前的元素是: " + iterator.getCurrentObj());
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

在这里插入图片描述

总结

看到这里相信各位看官老爷们都觉得上面的代码都很熟悉了吧,没错千绝是在参考jdk实现迭代器模式的例子,现在java对迭代器运用的已经很好了,我们现在基本上不用自己写迭代器了,有可能是千绝现在写的代码还是太简单,没有遇到过自己写迭代器的情况,所以介绍的有点粗糙还请各位看官老爷们不要介意。

下期预告:原型模式。

如果有喜欢千绝的可以关注、评论、转发一下。

最后你们觉得新房应该入手什么智能家居能提高生活品质呢。

在这里插入图片描述