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();
            }
        }
    }
    测试调用
  • 相关阅读:
    xml DTD中的ELEMENT和ATTLIST
    xml CDATA
    xml 及其语法
    java 多态的好处
    libusb-win32 在visual studio2008中成功编译回忆录
    【转帖】C# DllImport 系统调用使用详解 托管代码的介绍 EntryPoint的使用
    【转帖】.Net中C#的DllImport的用法
    .net 中的DllImport
    离线安装谷歌扩展
    排序算法哪家强?
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7477948.html
Copyright © 2011-2022 走看看