• java 之 迭代器模式(大话设计模式)


    众所周知,java是编程语言中的高级语言,在java的世界里,已经有前辈为我们封装好了各个很好用的框架,工具类等,今天笔者想说的迭代器模式也已经被封装过。

    就是我们经常使用的for循环迭代器。或者Iterator,这些都已经是封装好的了。我们经常用,可能会有些读者并不知道这就是迭代器模式。笔者在实际工作中还没有

    自己定义一个自己的迭代器去实现自己的业务遍历。先看下类图

    大话设计模式-类图

    看完类图我们能清晰看到,我们demo需要做的事情,首先定义一个自己的集合,这个集合要能创建一个迭代器。集合接口我们需要有四个方法见类图。

    看下笔者的demo

    /**
     * 迭代器接口
     */
    public interface Iterator<T> {
    
        public T first();
    
        public T next();
    
        public Boolean hasNext();
    
        public T current();
    }
    /**
     * 集合接口
     */
    public interface ICollection<T> {
        public Iterator<T> createIterator();
    }
    /**
     * 集合 实现类
     */
    public class MyCollection<T> implements ICollection<T>{
    
        List<T> list = new ArrayList<T>();
    
        @Override
        public Iterator<T> createIterator() {
            return new MyIterator<>(list);
        }
    
        public void add(T t) {
            list.add(t);
        }
    
        public void remove(T t) {
            list.remove(t);
        }
    }
    /**
     * 迭代器实现类
     */
    public class MyIterator<T> implements Iterator<T> {
    
        private int cursor;
    
        private List<T> list;
    
        public MyIterator(List<T> list){
            this.list = list;
        }
    
        @Override
        public T first() {
            cursor = 0;
            return list.get(0);
        }
    
        @Override
        public T next() {
            T t = null;
            if (hasNext()) {
                t = list.get(cursor);
            }
            cursor ++;
            return t;
        }
    
        @Override
        public Boolean hasNext() {
            return cursor < list.size();
        }
    
        @Override
        public T current() {
            return list.get(cursor);
        }
    
    }
    /**
     * 客户端
     */
    public class Test {
        public static void main(String[] args) {
            MyCollection<String> myCollection = new MyCollection<>();
            myCollection.add("a");
            myCollection.add("b");
            myCollection.add("c");
            myCollection.add("d");
            myCollection.add("e");
            Iterator<String> iterator = myCollection.createIterator();
            while(iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    }

    运行结果如下:

    a
    b
    c
    d
    e

    以上是简单的demo,笔者认为,迭代器java已经为我们封装好了。我们理解其运行原理,吸收其设计思想是重点。希望能帮助学习的小伙伴理解迭代器模式。

  • 相关阅读:
    PHP中的NULL类型
    js中自定义事件,使用了jQuery
    chrome调试文章
    codeforces 633D
    hdu 1496 Equations
    poj 1286 Necklace of Beads
    poj 2154 Color
    poj 3270 Cow Sorting
    poj 1026 Cipher
    poj 2369 Permutations
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8037973.html
Copyright © 2020-2023  润新知