zoukankan      html  css  js  c++  java
  • 设计模式学习笔记十六:迭代器模式

    介绍

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

    适用性

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

    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());
            }
        }
    }
    
  • 相关阅读:
    勿忘心安
    设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
    P1011 车站
    第一天
    P1134 阶乘问题
    P3152 正整数序列
    某数论
    DO YOU WANNA BUILD A SNOW MAN ?
    luogu P1579 哥德巴赫猜想(升级版)
    紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)
  • 原文地址:https://www.cnblogs.com/liushijie/p/4762125.html
Copyright © 2011-2022 走看看