android设计模式二十三式(十六)——迭代子模式(Iterators)

迭代子模式

迭代子子模式,虽然很少会去使用,但是我们对它确实很熟悉,我们都知道,集合类对象中有迭代器,其实那即是迭代子模式。

所以,迭代子模式,主要的作用就是遍历。

我们先定义两个接口,一个是迭代器,用来迭代一个群体,一个包含迭代器和群体数据的接口。

/**
 * @author: hx
 * @Time: 2019/5/17
 * @Description: Iterator
 */
public interface Iterator {

    Object previous();

    Object next();

    boolean hasNext();

    Object first();

    Object last();
}

/**
 * @author: hx
 * @Time: 2019/5/17
 * @Description: Group
 */
public interface Group {

    Iterator setIterator();

    int size();

    Object getIndext(int index);
}

做一个Iterator的实现类:

/**
 * @author: hx
 * @Time: 2019/5/17
 * @Description: MyIterator
 */
public class MyIterator implements Iterator {
    private Group mGroup;
    private int index = -1;

    public MyIterator(Group group) {
        mGroup = group;
    }

    @Override
    public Object previous() {
        if (index >0){
            return mGroup.getIndext(--index);
        }else {
            throw new ArrayIndexOutOfBoundsException("越界啦");
        }
    }

    @Override
    public Object next() {
        if (index < mGroup.size()-1){
            return mGroup.getIndext(++index);
        }else {
            throw new ArrayIndexOutOfBoundsException("越界啦");
        }
    }

    @Override
    public boolean hasNext() {
        if (index < mGroup.size()-1){
            return true;
        }else {
            return false;
        }
    }

    @Override
    public Object first() {
        return mGroup.getIndext(0);
    }

    @Override
    public Object last() {
        return mGroup.getIndext(mGroup.size()-1);
    }
}

 再做一个Group的实现类:

/**
 * @author: hx
 * @Time: 2019/5/17
 * @Description: MyGroup
 */
public class MyGroup implements Group {

    public char[] mChars = new char[]{'a','b','c','d','e','f','g'};

    @Override
    public Iterator setIterator() {
        return new MyIterator(this);
    }

    @Override
    public int size() {
        return mChars.length;
    }

    @Override
    public Object getIndext(int index) {
        return mChars[index];
    }
}

我们来试一下我们的迭代器的功能

public static void main(String[] args){
    Group group = new MyGroup();
    Iterator iterator = new MyIterator(group);

    while (iterator.hasNext()){
        System.out.println("元素:"+iterator.next());
    }
    System.out.println("获取上一个元素:"+iterator.previous());
    System.out.println("获取第一个元素:"+iterator.first());
    System.out.println("获取最后一个元素:"+iterator.last());
}

输出结果:
元素:a
元素:b
元素:c
元素:d
元素:e
元素:f
元素:g
获取上一个元素:f
获取第一个元素:a
获取最后一个元素:g

看起是不是很像集合中的迭代器,此处我们貌似模拟了一个集合类的过程,其实JDK中各个类也都是这些基本的东西,加一些设计模式,再加一些优化放到一起的,只要我们把这些东西学会了,掌握好了,我们也可以写出自己的集合类,甚至框架!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值