19迭代模式Iterator

一、什么是迭代模式

  Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式。

二、不使用迭代模式的应用

  在应用Iterator模式之前,首先应该明白Iterator 模式用来解决什么问题。或者说,如果不使用 Iterator模式,会存在什么问题。

    1.由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法

    2.让调用者自己实现遍历。直接暴露数据细节给外部。

三、不使用迭代模式的缺点

  以上方法1与方法2都可以实现对遍历,这样有问、 题呢?

    1,容器类承担了太多功能:一方面需要提供添加删除等本身应有的功能;一方面还需要提供遍历访问功能。

    2,往往容器在实现遍历的过程中,需要保存遍历状态,当跟元素的添加删除等功能夹杂在一起,很容易引起混乱和程序运行错误等。

四、使用迭代模式的应用

  Iterator模式就是为了有效地处理按顺序进行遍历访问 的一种设计模式,简单地说,Iterator模式提供一种有效 的方法,可以屏蔽聚集对象集合的容器类的实现细节, 而能对容器内包含的对象元素按顺序进行有效的遍历访 问。

  所以,Iterator模式的应用场景可以归纳为满足以下几个 条件:

    - 访问容器中包含的内部对象

    - 按顺序访问

五、迭代模式的结构

五、迭代模式的角色和职责

  Iterator(迭代器接口): 该接口必须定义实现迭代功能的最小定义方法集 比如提供hasNext()和next()方法。

  ConcreteIterator(迭代器实现类): 迭代器接口Iterator的实现类。可以根据具体情况加以实现。

  Aggregate(容器接口): 定义基本功能以及提供类似Iterator iterator()的方法。

  concreteAggregate(容器实现类): 容器接口的实现类。必须实现Iterator iterator()方法。

六、迭代模式的优点

  1,实现功能分离,简化容器接口。让容器只实现本身的基本功能,把迭代功能委让给外部类实现,符合类的设计原则。

  2,隐藏容器的实现细节。

  3,为容器或其子容器提供了一个统一接口,一方面方便调用;另一方面使得调用者不必关注迭代器的实现细节。

  4,可以为容器或其子容器实现不同的迭代方法或多个迭代方法。

 1 public class Book {
 2     private String ISBN;
 3     private String name;
 4     private double price;
 5
 6     public Book(String isbn, String name, double price) {
 7         ISBN = isbn;
 8         this.name = name;
 9         this.price = price;
10     }
11
12     public String getISBN() {
13         return ISBN;
14     }
15
16     public void setISBN(String isbn) {
17         ISBN = isbn;
18     }
19
20     public String getName() {
21         return name;
22     }
23
24     public void setName(String name) {
25         this.name = name;
26     }
27
28     public double getPrice() {
29         return price;
30     }
31
32     public void setPrice(double price) {
33         this.price = price;
34     }
35
36     public void display() {
37         System.out.println("ISBN=" + ISBN + ",name=" + name + ",price" + price);
38     }
39 }

图书列表

 1 import java.util.ArrayList;
 2 import java.util.Iterator;
 3 import java.util.List;
 4
 5 public class BookList {
 6     private List<Book> bookList;
 7     private int index;
 8     private Iterator iterator;
 9
10     public BookList() {
11         bookList = new ArrayList<Book>();
12     }
13
14     //添加书籍
15     public void addBook(Book book) {
16         bookList.add(book);
17     }
18
19     //删除书籍
20     public void deleteBook(Book book) {
21         int bookIndex = bookList.indexOf(book);
22         bookList.remove(bookIndex);
23     }
24
25 //    //判断是否有下一本书
26 //    public boolean hasNext() {
27 //        if(index >= bookList.size()) {
28 //            return false;
29 //        }
30 //        return true;
31 //    }
32 //
33 //    //获得下一本书
34 //    public Book getNext() {
35 //        return bookList.get(index++);
36 //    }
37
38 //    public List<Book> getBookList() {
39 //        return bookList;
40 //    }
41
42     public Iterator Iterator() {
43         return new Itr();
44     }
45     //迭代
46     private class Itr implements Iterator{
47
48         public boolean hasNext() {
49             if(index >= bookList.size()) {
50                 return false;
51             }
52             return true;
53         }
54
55         public Object next() {
56             return bookList.get(index++);
57         }
58
59         public void remove() {
60
61         }
62     }
63 }

测试

 1 import java.util.Iterator;
 2
 3 public class MainClss {
 4     public static void main(String[] args) {
 5         BookList bookList = new BookList();
 6
 7         Book book1 = new Book("010203","Java编程思想",90);
 8         Book book2 = new Book("010204","Java从入门到精通",60);
 9
10         bookList.addBook(book1);
11         bookList.addBook(book2);
12
13 //        while(bookList.hasNext()) {
14 //            Book book = bookList.getNext();
15 //            book.display();
16 //        }
17
18 //        List<Book> bookDateList = bookList.getBookList();
19 //        for(int i = 0; i < bookDateList.size(); i++) {
20 //            Book book = bookDateList.get(i);
21 //            book.display();
22 //        }
23
24         Iterator iter = bookList.Iterator();
25         while(iter.hasNext()) {
26             Book book = (Book) iter.next();
27             book.display();
28         }
29     }
30 }

原文地址:https://www.cnblogs.com/justdoitba/p/9034540.html

时间: 2024-10-23 23:47:08

19迭代模式Iterator的相关文章

设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包括迭代器接口(iterator interface), import java.util.Iterator; 继承

【设计模式】—— 迭代模式Iterator

前言:[模式总览]——————————by xingoo 模式意图 提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示. 应用场景 1 访问一个聚合的对象,而不需要暴露对象的内部表示 2 支持对聚合对象的多种遍历 3 对遍历不同的对象,提供统一的接口. 模式结构 Iterator 定义访问的接口 /** * 抽象的迭代,有判断结束和下一个,获取当前元素等函数 * @author xingoo * */ interface Iterator{ void first(); voi

Java迭代模式(Iterator模式)

上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:"误人子弟,乃是犯罪!"啊. 好了,那么我们现在来看老师这个点名过程是如何实现吧: 1.老规矩,我们先定义老师(Teacher)接口类: public interface Teacher { public Iterator createIterator(); //点名 } 2.具体的老师(Concre

迭代模式

迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation). 聚集和JAVA聚集 多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象.聚集依赖于聚集结构的抽象化,具有复杂化和多样性.数组就是最基本的聚集,也是其他的JAVA聚集对象的设计基础. JAVA聚集对象是实现了共同的java.util.Collection接口的对象,是JAVA语言

java设计模式--行为型模式--迭代模式

1 迭代器模式 2 概述 3 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 4 5 6 适用性 7 1.访问一个聚合对象的内容而无需暴露它的内部表示. 8 9 2.支持对聚合对象的多种遍历. 10 11 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 12 13 14 参与者 15 1.Iterator 16 迭代器定义访问和遍历元素的接口. 17 18 2.ConcreteIterator 19 具体迭代器实现迭代器接口.

大话设计模式笔记 组合模式 迭代模式 单例模式

组合模式(Composite),将对象组合合成树形以表示“部门整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 一句话说就是利用树这种数据结构储存对象. 迭代模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 数据结构内容. 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问他的 全局访问点. efficient java 中已经详细介绍了

二十四种设计模式:迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern) 介绍提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 示例有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现在要提供一种方法顺序地访问这个聚合对象中的各个元素. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Iterator { /// <summary>

《Java设计模式》之迭代模式

迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation). 聚集和JAVA聚集 多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象.聚集依赖于聚集结构的抽象化,具有复杂化和多样性.数组就是最基本的聚集,也是其他的JAVA聚集对象的设计基础. JAVA聚集对象是实现了共同的java.util.Collection接口的对象,是JAVA语言

设计模式入门之迭代器模式Iterator

迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部实现 迭代器模式的结构和说明 Iterator::迭代器接口.定义访问和遍历元素的接口 ConcreteIterator:具体的迭代器实现对象.实现对聚合对象的遍历,并跟踪遍历时的当前位置 Aggregate:聚合对象.定义创建相应迭代器对象的接口 ConcreteAggregate:具体聚合对象.实现创建相应的迭代器对象 实例:一个公司,工资列表是用List实现的,后收购一家公司,工资列表是用Array实现