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

    参考博客:https://www.cnblogs.com/airwindow/archive/2012/06/25/2560811.html  侵权删除

    迭代器  Iterator

    2019-06-26  10:31:44

    什么是迭代器模式:访问一个聚合对象的内容而无需暴露它的内部表示。例如,对于ArrayList、LinkedList等集合,客户都可以通过相同的操作方式遍历集合的对象。

    迭代器的适用场景:需要对多种集合类对象提供统一的访问内容的方法。

    迭代器的基本思想:在集合中实现迭代器,通过对迭代器的操作而访问集合内容。通过引入间接稳定的迭代器对象而封装了不同集合数据表示的差异性,使得客户端可以通过统一的迭代器对象访问集合。

    迭代器的基本代码(仿照JDK中源码,Selector对应Iterator)

    /**
     * 要求可以实现迭代的集合对象实现Selectable
     * 不直接实现Selector,是为了集合可以实现多种迭代器,可以根据需要获取相应的迭代器
     * @param <item>
     */
    public interface Selectable<item> {
        public Selector<item> selector();
    }
    /**
     * 迭代器
     * 实现了对集合的多种操作,并向外部提供统一的接口
     * @param <item>
     */
    public interface Selector<item> {
        public boolean hasNext();
        public item next();
        public boolean remove();
    }
    /**
     * 测试集合
     * 实现了Selectable
     * selector()方法返回相应的迭代器
     * 客户端可以通过 selector()方法获得迭代器,然后通过迭代器访问集合的对象。
     * @param <T>
     */
    public class TestCase<T> implements Selectable<T> {
        private T[] arr;
    
        public TestCase() {
            arr = (T[])new Object[]{1,2,3,4,5,6,7,8,9};
        }
    
        @Override
        public Selector<T> selector() {
            return new Selector<T>() {
                int i = 0;
                @Override
                public boolean hasNext() {
                    if(i<arr.length) return true;
                    return false;
                }
    
                @Override
                public T next() {
                    return arr[i++];
                }
    
                @Override
                public boolean remove() {
                    return false;
                }
            };
        }
    }
    public class Test {
        /**
         * 测试代码
         */
        public static void main(String[] args) {
            TestCase<Integer> integerTestCase = new TestCase<>();
            Selector<Integer> selector = integerTestCase.selector();
    //类似于Java中foreach语句
    while(selector.hasNext()){ System.out.println(selector.next()); } } }
    //结果
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 相关阅读:
    [HNOI 2015]菜肴制作
    [HNOI 2015]落忆枫音
    [NOIp 2009]靶形数独
    [HNOI 2010]Bounce 弹飞绵羊
    [CTSC 1999]拯救大兵瑞恩&[网络流24题]孤岛营救问题
    [SDOI 2008]Cave 洞穴勘测
    pandas 5 str 参考:https://mp.weixin.qq.com/s/Pwz9iwmQ_YQxUgWTVje9DQ
    比较工具
    当小内存遇上大量数据,你该怎么解决这个问题?
    python高性能编程 读书笔记
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11088564.html
Copyright © 2011-2022 走看看