迭代子模式
迭代子子模式,虽然很少会去使用,但是我们对它确实很熟悉,我们都知道,集合类对象中有迭代器,其实那即是迭代子模式。
所以,迭代子模式,主要的作用就是遍历。
我们先定义两个接口,一个是迭代器,用来迭代一个群体,一个包含迭代器和群体数据的接口。
/**
* @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中各个类也都是这些基本的东西,加一些设计模式,再加一些优化放到一起的,只要我们把这些东西学会了,掌握好了,我们也可以写出自己的集合类,甚至框架!