【设计模式】迭代器模式

简介:

一、什么是迭代器模式

提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

二、补充说明

单一职责原则,分离了集合对象的遍历行为,抽象出一个迭代器类来负责;

三、角色

迭代器接口

迭代器具体实现

抽象容器

具体容器

四、例子,JAVA实现

例子说明:使用迭代器遍历容器

迭代器接口

复制代码
package com.pichen.dp.behavioralpattern.iterator;


public interface Iterator {
    public Object first();
    
    public Object previous();
    
    public Object next();

    public boolean hasNext();

}
复制代码

迭代器具体实现

复制代码
package com.pichen.dp.behavioralpattern.iterator;

import java.util.List;


public class MyIterator implements Iterator{
    private List<Object> list;
    private int index = 0;

    public MyIterator(List<Object> list) {
        this.list = list;
    }
    @Override
    public Object previous() {
        if((this.index - 1) < 0){
            return null;
        }else{
            return this.list.get(--index);
        }
        
    }


    @Override
    public Object next() {
        if((this.index + 1) >= this.list.size()){
            return null;
        }else{
            return this.list.get(++index);
        }
    }


    @Override
    public boolean hasNext() {
        if(this.index < (this.list.size() - 1)){
            return true;
        }
        return false;
    }
    /**
     * 〈一句话功能简述〉
     * 〈功能详细描述〉
     * @see com.pichen.dp.behavioralpattern.iterator.Iterator#first()
     * @return
     */
    @Override
    public Object first() {
        if(this.list.size() <= 0){
            return null;
        }else{
            return this.list.get(0);
        }
    }

}
复制代码

抽象容器

复制代码
package com.pichen.dp.behavioralpattern.iterator;


public abstract class Container {

    public abstract Iterator iterator();
    
    public abstract void put(Object obj);
}
复制代码

具体容器

复制代码
package com.pichen.dp.behavioralpattern.iterator;

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



public class MyContainer extends Container{
    private List<Object> list;
    
    public MyContainer() {
        this.list = new ArrayList<Object>();
    }
    @Override
    public void put(Object obj){
        this.list.add(obj);
    }
    @Override
    public Iterator iterator() {
        return new MyIterator(list);
    }

}
复制代码

客户端调用示例

复制代码
package com.pichen.dp.behavioralpattern.iterator;

public class Main {

    public static void main(String[] args) {

        //创建一个自定义容器,直接使用ArrayList的实现,仅仅示例作用
        Container strContainer = new MyContainer();
        strContainer.put("001");
        strContainer.put("002");
        strContainer.put("003");
        
        Iterator myIterator = strContainer.iterator();
        //使用举例
        System.out.println("------------------next、hasNext示例------------------");
        System.out.println(myIterator.first());
        System.out.println(myIterator.next());
        System.out.println(myIterator.hasNext());
        System.out.println(myIterator.next());
        System.out.println(myIterator.hasNext());
        System.out.println(myIterator.next());
        System.out.println(myIterator.hasNext());
        
        //使用举例
        System.out.println("------------------previous、hasNext示例------------------");
        System.out.println(myIterator.previous());
        System.out.println(myIterator.previous());
        System.out.println(myIterator.previous());
        System.out.println(myIterator.hasNext());
        
        //使用迭代器遍历
        System.out.println("------------------迭代器遍历示例------------------");
        System.out.println(myIterator.first());
        while(myIterator.hasNext()){
            System.out.println(myIterator.next());
        }
    }
}
复制代码

结果打印

复制代码
------------------next、hasNext示例------------------
001
002
true
003
false
null
false
------------------previous、hasNext示例------------------
002
001
null
true
------------------迭代器遍历示例------------------
001
002
003
复制代码

 本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/5213716.html,如需转载请自行联系原作者

相关文章
|
4月前
|
设计模式 Java
Java设计模式【十七】:迭代器模式
Java设计模式【十七】:迭代器模式
31 0
|
6月前
|
设计模式 C++ 容器
设计模式之迭代器模式(C++)
设计模式之迭代器模式(C++)
|
4月前
|
设计模式
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
|
6月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——迭代器模式Iterator(原理讲解+应用场景介绍+案例介绍+Java代码实现)
28 0
|
6月前
|
设计模式
设计模式14 - 迭代器模式【Iterator Pattern】
设计模式14 - 迭代器模式【Iterator Pattern】
15 0
|
2天前
|
设计模式 Go
[设计模式 Go实现] 行为型~迭代器模式
[设计模式 Go实现] 行为型~迭代器模式
|
14天前
|
设计模式 Java
小谈设计模式(21)—迭代器模式
小谈设计模式(21)—迭代器模式
|
1月前
|
设计模式 存储 算法
【设计模式】迭代器模式
【设计模式】迭代器模式
|
3月前
|
设计模式 Java 数据挖掘
聊聊Java设计模式-迭代器模式
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。
44 0
聊聊Java设计模式-迭代器模式
|
3月前
|
设计模式 算法 Go
Golang设计模式——07迭代器模式
Golang设计模式——07迭代器模式
24 0