zoukankan      html  css  js  c++  java
  • 设计模式之迭代器模式 Iterator

     代码实现

    public interface MyIterator {
    
        void first();           //将游标指向第一个元素
        void next();            //将游标指向下一个元素
        boolean hasNext();     //判断是否存在下一个元素
        
        boolean isFirst();
        boolean isLast();
        
        Object getCurrentObj();   //获取当前游标指向的对象
    }
    自定义迭代器接口
    /**
     * 自定义聚合类
     * @author bzhx
     * 2017年3月14日
     */
    public class ConcreteMyAggregate {
    
        private List<Object> list = new ArrayList<Object>();
        
        public List<Object> getList() {
            return list;
        }
    
        public void setList(List<Object> list) {
            this.list = list;
        }
    
        public void addObject(Object obj){
            this.list.add(obj);
        }
        public void removeObject(Object obj){
            this.list.remove(obj);
        }
        
        //获得迭代器
        public MyIterator createIterator(){
            return new ConcreteIterator();
        }
        
        
        
        //使用内部类定义迭代器,可以直接使用外部类的属性
        public class ConcreteIterator implements MyIterator{
    
            private int cursor;  //定义游标用于记录遍历时的位置
            
            @Override
            public void first() {
                cursor = 0;
            }
    
            @Override
            public void next() {
                if(cursor<list.size()){
                    cursor++;
                }
            }
    
            @Override
            public boolean hasNext() {
                if(cursor<list.size()){
                    return true;
                }
                return false;
            }
    
            @Override
            public boolean isFirst() {
                return cursor==0?true:false;
            }
    
            @Override
            public boolean isLast() {
                return cursor==(list.size()-1)?true:false;
            }
    
            @Override
            public Object getCurrentObj() {
                return list.get(cursor);
            }
            
        }
    }
    自定义聚合类
    public class Client {
        public static void main(String[] args) {
            ConcreteMyAggregate cma = new ConcreteMyAggregate();
            cma.addObject("aa");
            cma.addObject("bb");
            cma.addObject("cc");
            
            MyIterator iter = cma.createIterator();
            while (iter.hasNext()) {
                System.out.println(iter.getCurrentObj());
                iter.next();
            }
        }
    }
    测试调用
  • 相关阅读:
    洛谷 P1498 南蛮图腾
    洛谷 P1538 迎春舞会之数字舞蹈
    洛谷 P1112 波浪数
    洛谷 P1102 A−B数对
    数字量化值Digital Number, 辐射亮度Radiance, 反射率Reflectance,发射率Emissive
    ENVI下基于劈窗算法从MODIS数据中反演海表温度
    ENVI 5.1安装教程
    一些链接
    1、GeometryService计算面积和长度(Calculate_Feature_Length_Or_Area)功能实现
    1、GeometryService的缓冲区(Buffer)功能实现
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7477948.html
Copyright © 2011-2022 走看看