迭代器模式

Posted xiaoliangup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器模式相关的知识,希望对你有一定的参考价值。

迭代器模式介绍

提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。迭代器是可以从前往后,或者从后往前遍历的。为遍历不同聚集结构提供如:开始,下一个,是否有下一个,是否结束,当前哪一个等等的一个统一接口。

聚合对象:存储数据

迭代器:遍历数据

 

迭代器模式UML图

技术分享图片

 

迭代器代码实现

迭代器接口

技术分享图片
public interface Iterator {
    void First();
    void next();
    
    Boolean hasNext();
    
    Boolean isFirst();
    Boolean isLast();
    
    Object currentItem();
    
    
}
View Code

 

聚合对象及迭代器实现类

技术分享图片
import java.util.ArrayList;
import java.util.List;

public class ConcreateMyAggregate {
    
    private List<Object> lists=new ArrayList<Object>();

    public ConcreateMyAggregate() {
        super();
        // TODO Auto-generated constructor stub
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }
    
    public void addObject(Object obj){
        lists.add(obj);
    }
    
    public void removeObject(Object obj){
        lists.remove(obj);
    }
    
    
    public Iterator getIterator(){
        return new MyIterator();
    }
    
    
     private class MyIterator implements Iterator{
         
         private int cursor;
         
         
        @Override
        public void First() {
            cursor=0;
        }

        @Override
        public void next() {
            if(hasNext() ){
                cursor++;
            }
        }

        @Override
        public Boolean isFirst() {
            return cursor==0?true:false;
        }

        @Override
        public Boolean isLast() {
            // TODO Auto-generated method stub
            return cursor==lists.size()-1 ? true:false;
        }

        @Override
        public Object currentItem() {
            return lists.get(cursor);
        }

        @Override
        public Boolean hasNext() {
            return cursor<lists.size()?true:false;
        }
        
    }
View Code

 

测试类

技术分享图片
public class Main {
    
    public static void main(String[] args) {
        ConcreateMyAggregate aggregate=new ConcreateMyAggregate();
        
        aggregate.addObject("aa");
        aggregate.addObject("bb");
        aggregate.addObject("cc");
        
        Iterator iterator = aggregate.getIterator();
        while(iterator.hasNext()){
            Object obj=iterator.currentItem();
            System.out.println(obj);
            iterator.next();
        }
        
    }
    
}
View Code

 

以上是关于迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 -- 迭代器模式(定义结构实例优缺点分析)

Python 设计模式 — 行为型模式 — 迭代器模式

设计模式-迭代器模式

迭代器模式

Python 设计模式 — 行为型模式 — 迭代器模式

设计模式学习