• 设计模式学习笔记十六:迭代器模式


    介绍

    迭代器设计模式: 迭代器提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

    适用性

    • 达到了数据结构与操作的分离
    • 访问一个集合对象而无需暴露它的内部表示
    • 支持对集合对象的多种遍历
    • 为遍历不同的集合结构提供一个统一的接口

    UML结构图:

    Iterator

    场景模拟

    集合遍历操作

    代码实现

    1.定义迭代接口,即Iterator:

    public interface Iterator<T> {
        public T first();
        public T next();
        public T current();
        public boolean hasNext();
    }
    
    

    2.实现迭代接口:

    public class ConcreteIterator<T> implements Iterator {
        private List<T> list;
        private int cursor = 0;
        @Override
        public T first() {
            return list.get(0);
        }
        public ConcreteIterator(final List<T> list) {
            if (list == null) {
                throw new NullPointerException("list can not be null!");
            }
            this.list = list;
        }
    
        @Override
        public T next() {
            return hasNext() ? list.get(cursor++) : null;
        }
    
        @Override
        public T current() {
            return list.get(cursor);
        }
    
        @Override
        public boolean hasNext() {
            return cursor < list.size();
        }
    }
    

    3.模拟集合接口Aggregate:

    public interface Aggregate<T> {
        public void add(T t);
        public void remove(int index);
        public Iterator<T> iterator();
    }
    

    4.模拟集合接口实现,ConcreteAggregate:

    public class ConcreteAggregate implements Aggregate<String> {
        private List<String> list;
        public ConcreteAggregate() {
            list = new ArrayList<String>();
        }
        @Override
        public void add(String s) {
            list.add(s);
        }
        @Override
        public void remove(int index) {
            list.remove(index);
        }
        @Override
        public Iterator<String> iterator() {
            return new ConcreteIterator<String>(list);
        }
    }
    
    

    5.调用,即Client:

    public class Run {
        public static void main(String[] args) {
            ConcreteAggregate aggregate = new ConcreteAggregate();
            aggregate.add("a");
            aggregate.add("b");
            aggregate.add("c");
            Iterator<String> iterator = aggregate.iterator();
            System.out.println(iterator.first());
            System.out.println();
            while (iterator.hasNext()) {
                System.out.println(iterator.current());
                System.out.println(iterator.next());
            }
        }
    }
    
  • 相关阅读:
    端模板引擎
    Orcale Function Sequence
    OData 集成
    validate[.unobtrusive]和Bootstrap实现tooltip错误提示
    Django
    Web Api 控制器
    HelloWorld和数据绑定
    动态Web Api层
    用户管理
    Docker
  • 原文地址:https://www.cnblogs.com/liushijie/p/4762125.html
Copyright © 2020-2023  润新知