一天一种JAVA设计模式之十六:迭代器模式(很少使用)

348 阅读2分钟

写在前面的话

复习、总结23种设计模式

获取详细源码请点击我

上一篇

# 一天一种JAVA设计模式之十五:观察者模式

迭代器模式

记重点

使用java自带的java.util.Iterator基本够用了

定义

它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节

迭代器模式的通用类图

image.png

Iterator抽象迭代器

抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:firstO获得第一个元素,next()访问下一个元素,isDone()是否已经访问到底部(Java叫做hasNext()方法)。

package com.design.pattern.iterator.test02;  
  
public interface Iterator {  
    boolean hasNext();  
    Object next();  
}

ConcreteIterator具体迭代器 具体迭代器角色要实现迭代器接口,完成容器元素的遍历

package com.design.pattern.iterator.test02;  
  
import java.util.Vector;  
  
public class ConcreteIterator implements Iterator {  
  
    private Vector vector = new Vector();  
    private int size = 0;  

    public int cursor = 0;  

    public ConcreteIterator(Vector vector) {  
        this.vector = vector;  
        size = vector.size();  
    }  

    @Override  
    public boolean hasNext() {  
        return this.cursor < this.size;  
    }  

    @Override  
    public Object next() {  
        return this.hasNext() ? this.vector.get(this.cursor++) : null;  
    }  
  
}

Aggregate抽象容器

容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的方法,在Java中一般是iterator()方法。

package com.design.pattern.iterator.test02;  
  
// 抽象容器  
public interface Aggregate {  
  
    //添加  
    void add(Object obj);  

    //删除  
    void remove(Object obj);  

    //获取迭代器对象  
    Iterator iterator();  
  
}

Concrete Aggregate具体容器 具体容器实现容器接口定义的方法,创建出容纳选代器的对象。

package com.design.pattern.iterator.test02;  
  
import java.util.Vector;  
  
// 具体容器  
public class ConcreteAggregate implements Aggregate{  
  
    private Vector vector = new Vector();  

    @Override  
    public void add(Object obj) {  
        vector.add(obj);  
    }  

    @Override  
    public void remove(Object obj) {  
        vector.remove(obj);  
    }  

    @Override  
    public Iterator iterator() {  
        return new ConcreteIterator(vector);  
    }  
}

测试

package com.design.pattern.iterator.test02;  
  
public class Client {  
    public static void main(String[] args) {  
        Aggregate aggregate = new ConcreteAggregate();  
        aggregate.add("1");  
        aggregate.add("avc");  
        aggregate.add(5);  

        Iterator iterator = aggregate.iterator();  
        while (iterator.hasNext()) {  
        Object next = iterator.next();  
        System.out.println(next);  
        }  
    }  
}

上一篇

# 一天一种JAVA设计模式之十五:观察者模式