• [Design Pattern] Iterator Pattern 简单案例


    Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式。为了方便理解记忆,我也会称其为遍历模式。

    下面是一个迭代器模式的简单案例。

    Iterator 定义了迭代接口, 仅 hasNext 和 next 两个方法。Container 定义了集合的接口,必须包含一个返回迭代器类 Iterator 的方法。NameRepository 是容器的具体类,实现 Container 接口,并拥有一个内部类 NameIterator ,该内部类实现了 Iterator 接口,用于遍历容器的全部元素。IteratorPatternDemo 演示迭代器模式。

    代码实现

    Iterator 接口,定义遍历的两个方法

    public interface Iterator {
    
        public boolean hasNext();
        
        public Object next();
    }

    Container 接口,定义返回迭代器 Iterator 的方法

    public interface Container {
    
        public Iterator getIterator();
    }

    NameRepository 是具体的容器内,含有一个内部类,内部类实现了 Iterator 接口,提供遍历集合元素的功能。

    public class NameRepository implements Container {
    
        private String[] names = "apple,banana,pear,orange".split(",");
        
        @Override
        public Iterator getIterator() {
            return new NameIterator();
        }
        
        private class NameIterator implements Iterator{
    
            private int index;
            
            NameIterator(){
                index = 0;
            }
            
            @Override
            public boolean hasNext() {
                return this.index < names.length;
            }
    
            @Override
            public Object next() {
                Object res = names[index];
                index++;
                return res;
            }
        }
    }

    演示代码

    public class IteratorPatternDemo {
    
        public static void main(){
            
            NameRepository nameRepository = new NameRepository();
            Iterator iter = nameRepository.getIterator();
            while(iter.hasNext()){
                System.out.println(iter.next());
            }
        }
    }

    参考资料

    Design Patterns - Iterator Pattern, TutorialsPoint

  • 相关阅读:
    IEC61850标准化逻辑节点组
    获取类成员函数地址和通过成员函数地址调用对应成员函数
    [转]什么是差动保护
    IEC61850概述
    window下使用mingw编译vlc2.1.0git
    Code::Blocks集成Cygwin的使用
    [STL] 注意erase() 和remove()
    C# 调用C++DLL传递指向指针的指针参数的方法
    Boost的使用相关
    在window下qt开发环境
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/5515812.html
Copyright © 2020-2023  润新知