迭代器模式(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());
        }
    }
}

  • 输出如下:

以上
希望对大家有所帮助

posted @ 2021-02-02 11:04  醉生梦死_0423  阅读(106)  评论(0)    收藏  举报