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();
            }
        }
    }
    测试调用
  • 相关阅读:
    为什么新买的音响连接上电脑后有很强的杂音(电流声)?
    USB2.0 Camera驱动
    如何重命名多张图片的名称
    网络共享:[25]组策略
    线刷宝“华为荣耀畅玩7 (DUA-AL00)”刷机教程
    电信手机卡被锁,忘记了PIN码,怎么办?
    [转]glyphicons-halflings-regular字体 图标
    牛年祝福语大全
    HYQiHei GES字体汉仪旗黑全套字体
    得实AR-530K打印机驱动 vB5.5官方版
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7477948.html
Copyright © 2011-2022 走看看