• 迭代器模式


    迭代器模式介绍

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

    聚合对象:存储数据

    迭代器:遍历数据

    迭代器模式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
  • 相关阅读:
    BZOJ4401 块的计数
    poj2914 Minimum Cut 全局最小割模板题
    无向图求最小割集
    HDU3232 Crossing Rivers 数学期望问题
    poj1386 字符串类型的一笔画问题 欧拉回路
    HDU3018 几笔画(非1笔)
    欧拉路&&欧拉回路 概念及其练习
    欧拉回路基础 HDU1878 欧拉回路||并差集
    我的明天在何处
    哈夫曼树讲解
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/9119240.html
Copyright © 2020-2023  润新知