迭代器:封装容器遍历具体算法
package designpattern;
import java.util.Arrays;
public class IteratorContext {
public static void main(String[] args) {
MyList list = new MyList(3);
list.add("ABC");
list.add("123");
list.add(22);
System.out.println(list.toString());
// list.remove(2);
// System.out.println(list.toString());
Iterator i = list.iterator();
System.out.println("interator: ");
while(i.hasNext()) {
System.out.print(i.next() + " ");
}
System.out.println();
}
}
interface Iterator {
boolean hasNext();
Object next();
void remove();
}
class MyList {
private Object[] objs;
private int size;
private int index;
public MyList(int size) {
if(size < 1) {
throw new IllegalArgumentException("size is error!");
}
index = 0;
this.size = size;
objs = new Object[size];
}
public void add(Object obj) {
if(index >= size) {
throw new IllegalArgumentException("list is full!");
}
objs[index++] = obj;
}
public void remove(int ind) {
if(ind < 0 || ind >= index) {
throw new IllegalArgumentException("index error!");
}
for(int i=ind; i<size; i++) {
if(i==size-1) {
objs[i] = null;
} else {
objs[i] = objs[i+1];
}
}
}
public String toString() {
return Arrays.toString(objs);
}
public Iterator iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator {
private int cursor;
private MyIterator() {
cursor = 0;
}
@Override
public boolean hasNext() {
return cursor < index;
}
@Override
public Object next() {
return objs[cursor++];
}
@Override
public void remove() {
}
}
}