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

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

    迭代器模式的优点有:

    1、访问一个聚合对象的内容而无须暴露它的内部表示。

    2、遍历任务交由迭代器完成,这简化了聚合类。

    3、它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。

    4、增加新的聚合类和迭代器类都很方便,无须修改原有代码。

    5、封装性良好,为遍历不同的聚合结构提供一个统一的接口。

    聚合类:

     1 public interface Aggregate {
     2     public void add(Object obj); 
     3     public void remove(Object obj); 
     4     public Iterator getIterator(); 
     5 }
     6 
     7 public class ConcreteAggregate implements Aggregate {
     8     private List<Object> list = new ArrayList<Object>();
     9 
    10     public void add(Object obj) {
    11         list.add(obj);
    12     }
    13     
    14     public void remove(Object obj) {
    15         list.remove(obj);
    16     }
    17 
    18     public Iterator getIterator() {
    19         Iterator i️terator = new ConcreteIterator(list);
    20         return i️terator;
    21     }
    22 }

    迭代器类:

     1 public interface Iterator {
     2     Object first();
     3     Object next();
     4     boolean hasNext();
     5 }
     6 
     7 public class ConcreteIterator implements Iterator {
     8     private List<Object> list = null;
     9     private int index = -1;
    10 
    11     public ConcreteIterator(List<Object> list) {
    12         this.list = list;
    13     }
    14 
    15     public boolean hasNext() {
    16         if (index < list.size() - 1) {
    17             return true;
    18         } else {
    19             return false;
    20         }
    21     }
    22 
    23     public Object first() {
    24         Object obj = list.get(0);
    25         return obj;
    26     }
    27 
    28     public Object next() {
    29         Object obj = null;
    30         if (this.hasNext()) {
    31             obj = list.get(++index);
    32         }
    33         return obj;
    34     }
    35 }

    调用方式:

     1 public class ConcreteIterator implements Iterator {
     2     private List<Object> list = null;
     3     private int index = -1;
     4 
     5     public ConcreteIterator(List<Object> list) {
     6         this.list = list;
     7     }
     8 
     9     public boolean hasNext() {
    10         if (index < list.size() - 1) {
    11             return true;
    12         } else {
    13             return false;
    14         }
    15     }
    16 
    17     public Object first() {
    18         Object obj = list.get(0);
    19         return obj;
    20     }
    21 
    22     public Object next() {
    23         Object obj = null;
    24         if (this.hasNext()) {
    25             obj = list.get(++index);
    26         }
    27         return obj;
    28     }
    29 }

    执行结果:

  • 相关阅读:
    sql笔记
    虚函数和抽象类笔记
    构造函数和静态构造函数 笔记
    在与sql server 建立连接时出现与网络相关的或特定于实例的错误
    类型转换 笔记
    test
    document.body和document.documentElement比较
    sql2005 存储过程实现分页
    新闻发布用到的存储过程和触发器
    SQL数据查询实例1
  • 原文地址:https://www.cnblogs.com/asenyang/p/12111090.html
Copyright © 2011-2022 走看看