设计模式->行为型模式->迭代器模式

来源:互联网 发布:安知玉如意好看吗 编辑:程序博客网 时间:2024/05/20 04:28

1.定义:提供一种方法访问容器对象中的各个元素,但是不暴露容器中对象的内部细节

2.UML


3.涉及角色

1.抽象迭代器角色:定义了遍历以及访问容器对象的行为

2.抽象容器角色:定义了对容器的操作以及获得该容器迭代器的行为

3.具体迭代器:抽象迭代器具体子类,即遍历以及访问容器对象具体逻辑的实现者

4.具体角色容器:容器操作具体逻辑以及获得迭代器的具体实现

4.优点

1.访问容器对象中的各个元素,但是不暴露容器中对象的内部细节

5.缺点

JDK将该模式融入API,所以该模式不很长,JDK提供的API已经满足需要

6.使用场景
1.自己编写系统级别的应用
2.系统中没有现有的迭代器使用

7.code
抽象迭代角色
如果迭代器存在删除方法,那么该方法需要完成两个逻辑1.删除当前元素 2.游标需要指向下一个元素
public interface Iterator<T> {    public T next();    public boolean hasNext();}
抽象容器角色
public interface IContainer<T> {    public void add(T t);    public void remove(T t);    public Iterator<T> iterator();    public int size();}
具体迭代角色
public class ConcreteIterator<T> implements Iterator<T> {    private Vector<T> vector = new Vector<T>();    private int cursor = 0;    public ConcreteIterator() {        super();    }    public ConcreteIterator(Vector<T> vector) {        this.vector = vector;    }    @Override    public T next() {        return this.hasNext() ? this.vector.get(this.cursor++) : null ;    }    @Override    public boolean hasNext() {        if(this.cursor == this.vector.size()) {            return false;        } else {            return true;        }    }}
具体容器角色
public class ConcreteContainer<T> implements IContainer<T>{    private Vector<T> vector = new Vector<T>();    @Override    public void add(T t) {        this.vector.add(t);    }    @Override    public void remove(T t) {        this.vector.remove(t);    }    @Override    public Iterator iterator() {        return new ConcreteIterator<T>(this.vector);    }    @Override    public int size() {        return this.vector.size();    }}