迭代器模式(Iterator)_java实现
//20210202
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现迭代器模式
迭代器模式核心思想:
- 创造一个黑盒,盒子里有添加进去的所有元素,取元素时只能根据黑盒上的接口按照加入顺序一个一个取出,删除也要遍历到相应位置才能删除,用户不需要知道黑盒里发生了了什么,只需要知道黑盒一次只返回一个元素即可
程序源代码:
/**
* 容器接口
*/
public interface Aggregate {
void add(Object object);
void remove(Object object);
Iterator iterator();
}
/**
* 迭代器接口
*/
public interface Iterator {
Object next();//遍历到下一个元素
boolean hasNext();//是否已经遍历到尾部
boolean remove();//删除当前指向的元素
}
/**
* 具体容器类(容器类将填入迭代器)
*/
import java.util.Vector;
public class ConcreteAggregate implements Aggregate{
private Vector vector = new Vector();
@Override
public void add(Object object) {
this.vector.add(object);
}
@Override
public void remove(Object object) {
this.remove(object);
}
@Override
public Iterator iterator() {
return new ConcreteIterator(this.vector);
}
}
/**
* 具体迭代器类
*/
import java.util.Vector;
public class ConcreteIterator implements Iterator{
private Vector vector;
public int cursor = 0;
public ConcreteIterator(Vector vector){
this.vector = vector;
}
@Override
public Object next() {
Object result = null;
if(this.hasNext()){
result = this.vector.get(this.cursor ++);
}
return result;
}
@Override
public boolean hasNext() {
if(this.cursor == this.vector.size()){
return false;
}
return true;
}
@Override
public boolean remove() {
this.vector.remove(this.cursor);
return true;
}
}
/**
* 测试主类
*/
public class Main {
public static void main(String[] args) {
Aggregate aggregate = new ConcreteAggregate();
aggregate.add("test1");
aggregate.add("test2");
aggregate.add("test3");
//遍历
Iterator iterator = aggregate.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
- 输出如下:
以上
希望对大家有所帮助