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

    一、定义

      迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
     

    二、结构

    迭代器模式的结构 

     
    迭代器模式主要包含以下角色。

      1)抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。

      2)具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 

      3)抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。

      4)具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

    结构图

      

    三、代码实现

     1 public class Client {
     2     public static void main(String[] args) {
     3         Aggregate ag = new ConcreteAggregate();
     4         ag.add("中山大学");
     5         ag.add("华南理工");
     6         ag.add("韶关学院");
     7         System.out.println("聚合的内容有:");
     8         Iterator it = ag.getIterator();
     9         while (it.hasNext()) {
    10             System.out.println(it.next().toString());
    11         }
    12     }
    13 }
    14 
    15 
    16 // 抽象聚合
    17 interface Aggregate {
    18     public void add(Object obj);
    19 
    20     public void remove(Object obj);
    21 
    22     public Iterator getIterator();
    23 }
    24 
    25 // 具体聚合
    26 class ConcreteAggregate implements Aggregate {
    27 
    28     private List<Object> list = new ArrayList<>();
    29 
    30     @Override
    31     public void add(Object obj) {
    32         list.add(obj);
    33     }
    34 
    35     @Override
    36     public void remove(Object obj) {
    37         list.remove(obj);
    38     }
    39 
    40     @Override
    41     public Iterator getIterator() {
    42         return new ConcreteIterator(list);
    43     }
    44 }
    45 
    46 // 抽象迭代器
    47 interface Iterator {
    48     boolean hasNext();
    49 
    50     Object next();
    51 
    52     void remove(Object obj);
    53 }
    54 
    55 // 具体迭代器
    56 class ConcreteIterator implements Iterator {
    57 
    58     private List<Object> list = null;
    59     private int index = -1;
    60 
    61     public ConcreteIterator(List<Object> list) {
    62         this.list = list;
    63     }
    64 
    65     @Override
    66     public boolean hasNext() {
    67         if (index < list.size() - 1) {
    68             return true;
    69         }
    70         return false;
    71     }
    72 
    73     @Override
    74     public Object next() {
    75         return list.get(++index);
    76     }
    77 
    78     @Override
    79     public void remove(Object obj) {
    80         index--;
    81         list.remove(obj);
    82     }
    83 }

    四、JDK源码实现

      参考:集合类的Iterator

  • 相关阅读:
    linux中ll和du的区别
    django+celery+redis环境搭建
    python中若干错误
    js正则表达式中匹配反引号
    yii学习小结
    linux下DNS设置以及解析顺序
    apache中若干模块的安装
    HTML基础
    selenium
    selenium
  • 原文地址:https://www.cnblogs.com/h--d/p/14705378.html
Copyright © 2011-2022 走看看