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();
            }
        }
    }
    测试调用
  • 相关阅读:
    定位
    浮动
    标准文档流
    盒模型
    CSS继承性和层叠性
    微信公众平台-信息的获取
    信息系统项目管理师-整体介绍
    Dijkstra算法 c语言实现
    windows下c语言获取程序当前的执行目录,读文件的代码片
    网络流问题,及其代码
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7477948.html
Copyright © 2011-2022 走看看