• 迭代器模式(设计模式_22)


    迭代器模式的定义,就是提供一种方法访问内聚对象的各个元素信息,然而不暴露该对象的内部表示

    其实在 Java或者是C#这样的语言当中已经都把迭代器定义在了内部中,注意:(有集合的地方就有迭代器


    // Java内部里面定制好了迭代器,例如:
    List<String> list = new ArrayList<String>();
    list.add("111");
    list.add("222");
    list.add("333");
    java.util.Iterator<String> iterator2 = list.iterator();
    while (iterator2.hasNext()) {
        System.out.println(iterator2.next());
    }

    运行结果:
    这里写图片描述


    模拟添加数据,使用迭代器模式完成:

    package com.oop.demo1;
    
    /**
     * 定义迭代器抽象类
     * @author Liudeli
     *
     */
    public abstract class Iterator {
    
        /**
         * 查找下一个
         * @return
         */
        public abstract Object next();
    
        /**
         * 下一个是否存在
         * @return
         */
        public abstract boolean hasNext();
    
    }
    
    package com.oop.demo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class IteratorImpl extends Iterator{
    
        private List<String> list = new ArrayList<String>();
        private int cursor = 0;
    
        public IteratorImpl(List<String> list) {
            this.list = list;
        }
    
        public boolean hasNext() {
            if(cursor==list.size()){  
                return false;  
            }  
            return true;  
        }
    
        public Object next() {
            Object obj = null;  
            if(this.hasNext()){  
                obj = this.list.get(cursor++);  
            }  
            return obj; 
        }
    }
    
    package com.oop.demo1;
    
    /**
     * 抽象出存储数据的抽象类
     * @author Liudeli
     *
     */
    public abstract class Aggregate {
    
        /**
         * 抽象添加的行为
         * @param object
         */
        public abstract void add(Object object);
    
        /**
         * 得到迭代器,迭代器可以去迭代数据
         * @return
         */
        public abstract Iterator iterator();
    
    }
    
    package com.oop.demo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class AggregateImpl extends Aggregate{
    
         private List list = new ArrayList();  
    
         public void add(Object obj) {      
             list.add(obj);  
         }  
    
         public Iterator iterator() {  
             return new IteratorImpl(list);  
         }  
    }
    
    /**
     * 测试程序(迭代器模式)
     * @author Liudeli
     *
     */
    public class Main {
    
        public static void main(String[] args) {
    
            /*
            // Java内部里面定制好了迭代器,例如:
            List<String> list = new ArrayList<String>();
            list.add("111");
            list.add("222");
            list.add("333");
            java.util.Iterator<String> iterator2 = list.iterator();
            while (iterator2.hasNext()) {
                System.out.println(iterator2.next());
            }
            */
    
            Aggregate aggregate = new AggregateImpl();
            aggregate.add("旺财");
            aggregate.add("痞子阿三");
            aggregate.add("小黄");
            aggregate.add("史珍香");
    
            Iterator iterator = aggregate.iterator();
            while (iterator.hasNext()) {
                String name = iterator.next().toString();
                System.out.println(name);
            }
        }

    运行结果:
    这里写图片描述


    这里写图片描述


    谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
    刘德利CSDN博客, http://blog.csdn.net/u011967006

  • 相关阅读:
    高德API+Python解决租房问题(.NET版)
    Jexus支持HTTPS协议
    pktgen使用详细教程
    结构体字节对齐2
    linux 用户空间获得纳秒级时间ns
    充分利用CPU高速缓存,提高程序效率(原理篇)
    Vue实现PC端分辨率自适应
    pip install 默认安装路径修改
    Vue AES+MD5加密 后台解密
    @Controller和@RestController的区别
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322193.html
Copyright © 2020-2023  润新知