zoukankan      html  css  js  c++  java
  • 迭代器模式

    迭代器模式介绍

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

    聚合对象:存储数据

    迭代器:遍历数据

    迭代器模式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
  • 相关阅读:
    BT656与BT1120的区别
    Arria10中PHY的时钟线结构
    Arria10中的IOPLL与fPLL
    Nios内部RAM固化配置
    实现1sym转换成2个sym送给CVI(VGA数据)
    embeded_2_separate_sync
    动态规划--青蛙跳
    动态规划 0--1 背包问题
    模拟题
    动态规划--最大子段和
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/9119240.html
Copyright © 2011-2022 走看看