图解设计模式-Iterator模式

使用抽象类和接口,弱化类之间的耦合,使类可以更容易组件化

不使用具体类编程,要优先使用抽象类和接口编程

角色划分:

Iterator迭代器接口,定义遍历元素的接口,hasNext判断是否有下一个、next获得下一个值

ConcreteIterator:迭代器具体的实现类,实现了hasNext、next两个方法,需要根据具体的被迭代对象进行自定。

Aggregate集合接口,包含了获得Iterator迭代器的方法

ConcreteAggregate集合的具体实现类,实现了了获得Iterator迭代器的方法

  • 定义被编列的类
public class Book {

    private String name;

    public Book(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }
}

定义遍历接口

public interface Iterator {
    public abstract boolean hasNext();
    public abstract Object next();
}

定义书架类集合

import java.util.ArrayList;
import java.util.List;

public class BookShelf extends Aggregate {

    private List<Book> bookList = new ArrayList<>();

    public void addBook(Book book) {
        bookList.add(book);
    }

    public Book getIndex(int i) {
        return bookList.get(i);
    }

    public int getLength() {
        return bookList.size();
    }

    @Override
    public Iterator iterator() {
        return new BookShelfIterator(this);
    }
}

定义书架类对应的书架遍历类

public class BookShelfIterator implements Iterator {

    private BookShelf bookShelf;

    private int index;

    public BookShelfIterator(BookShelf bookShelf) {
        this.bookShelf = bookShelf;
        this.index = 0;
    }
    @Override
    public boolean hasNext() {
        if(bookShelf.getLength()>index) {
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        Book book = bookShelf.getIndex(index);
        index++;
        return book;
    }
}

定义测试类

public class Main {
    public static void main(String[] args){
        BookShelf bookShelf = new BookShelf();
        bookShelf.addBook(new Book("数学"));
        bookShelf.addBook(new Book("物理"));
        bookShelf.addBook(new Book("化学"));
        Iterator iterator = bookShelf.iterator();
        for(;iterator.hasNext();) {
            Book book = (Book)iterator.next();
            System.out.println(book.getName());
        }
    }
}

总结:被遍历的集合类(BookShelf)与遍历类(BookShelfIterator)分开定义,进行解耦,方便扩展。

原文地址:https://www.cnblogs.com/use-D/p/9545491.html

时间: 2024-10-09 22:47:11

图解设计模式-Iterator模式的相关文章

图解设计模式-Strategy模式

Strategy(算法)模式可以整体的替换算法的实现部分. 重点说明: 使用委托这种弱关联关系可以很方便的整体替换算法. 角色: Strategy策略:该角色负责决定实现策略所需要的接口api. ConcreteStrategy具体策略:该角色负责实现Strategy角色接口api.即负责实现具体的策略. Context上下文:负责使用Strategy角色,Context角色保存了ConcreteStrategy角色的实例,并使用ConcreteStrategy角色去实现需求. 代码: publ

设计模式 - 迭代器模式(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; 继承(

设计模式 - 组合模式(composite pattern) 迭代器(iterator) 详解

组合模式(composite pattern) 迭代器(iterator) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考组合模式(composite pattern): http://blog.csdn.net/caroline_wendy/article/details/36895627 在组合模式(composite pattern)添加迭代器功能, 遍历每一个组合(composite)的项. 具体方法: 1. 抽象组件类(abstract

Java设计模式之Iterator模式

分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例,模拟Iterator的原理.参考:马士兵 Java设计模式 Iterator1.首先定义一个容器Collection接口. [java] view plaincopy package com.njupt.zhb.learn.iterator; public interface Collection

设计模式 - 迭代器模式(iterator pattern) 详解

迭代器模式(iterator pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示; 建立迭代器接口(iterator interface), 包含hasNext()方法和next()方法; 不同聚合对象的具体的迭代器(concrete iterator), 继承(implements)迭代器接口(iterator in

设计模式 - 迭代器模式(iterator pattern) 扩展 详解

迭代器模式(iterator pattern) 扩展 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式-Java迭代器: http://blog.csdn.net/caroline_wendy/article/details/35268931 扩展迭代器模式, 添加一个Hashtable存储的类. 具体方法: 1. Hashtable的类, 包含创建value()的迭代器(iterator). /** * @time 2014年6月27日

设计模式之Iterator模式

STL里的iterator就是应用了iterator模式. 一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式. 二.不使用迭代模式的应用 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题.或者说,如果不使用Iterator模式,会存在什么问题. 由容器自己实现顺序遍历.直接在容器类里直接添加顺序遍历方法 让调用者自己实现遍历.直接暴露数据细节给外部.

【设计模式大法】Iterator模式

Iterator模式 --一个一个遍历 在Java中的for语句中 i++的作用是让 i 的值在每次循环后自增1,这样就可以访问数组中的下一个元素.下下一个元素.再下下一个元素,也就实现了从头至尾逐一遍历数组元素的功能. 将这里的循环变量 i的作用抽象化.通用化后形成的模式,在设计模式中称为 Iterator 模式. 示例程序 Aggregate接口 Aggregate接口是索要遍历的集合的接口.实现了该接口的类将称为一个可以保持多个元素的集合. public interface Aggrega

【图解设计模式】Mediator模式

组员向仲裁者报告,仲裁者向组员下达指示.组员之间不再相互询问和相互指示. 示例 一个GUI应用程序,它展示了一个登录对话框,用户在其中输入正确的用户名和密码后可以登录. 可以选择作为游客访问(Guest)或是作为用户登录(Login) 作为用户登录时,需要输入正确的用户名(Username)和密码(Password) 点击OK按钮可以登录,点击Cancel按钮可以取消登录 类图 时序图 Mediator接口 1234 public interface { public abstract void