Java设计模式之迭代模式(Iterator模式)介绍

作者:junjie 时间:2022-07-24 16:03:29 

上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟,乃是犯罪!”啊。

好了,那么我们现在来看老师这个点名过程是如何实现吧:
1、老规矩,我们先定义老师(Teacher)接口类:


public interface Teacher {
    public Iterator createIterator(); //点名
}


2、具体的老师(ConcreteTeacher)类是对老师(Teacher)接口的实现:


public class ConcreteTeacher implements Teacher{
    private Object[] present = {"张三来了","李四来了","王五没来"}; //同学出勤集合
    public Iterator createIterator(){
        return new ConcreteIterator(this); //新的点名
    }
    public Object getElement(int index){ //得到当前同学的出勤情况
        if(index<present.length){
            return present[index];
        }
        else{
            return null;
        }
    }
    public int getSize(){
        return present.length; //得到同学出勤集合的大小,也就是说要知道班上有多少人
    }
}


3、定义点名(Iterator)接口类:


public interface Iterator {
    void first(); //第一个
    void next(); //下一个
    boolean isDone(); //是否点名完毕
    Object currentItem(); //当前同学的出勤情况
}


4、具体的点名(ConcreteIterator)类是对点名(Iterator)接口的实现:


public class ConcreteIterator implements Iterator{
    private ConcreteTeacher teacher;
    private int index = 0;
    private int size = 0;
    public ConcreteIterator(ConcreteTeacher teacher){
        this.teacher = teacher;
        size = teacher.getSize(); //得到同学的数目
        index = 0;
    }
    public void first(){ //第一个
        index = 0;
    }
    public void next(){ //下一个
        if(index<size){
            index++;
        }
    }
    public boolean isDone(){ //是否点名完毕
        return (index>=size);
    }
    public Object currentItem(){ //当前同学的出勤情况
        return teacher.getElement(index);
    }
}

5、编写测试类


public class Test {
    private Iterator it;
    private Teacher teacher = new ConcreteTeacher();
    public void operation(){
        it = teacher.createIterator(); //老师开始点名
        while(!it.isDone()){ //如果没点完
            System.out.println(it.currentItem().toString()); //获得被点到同学的情况
            it.next(); //点下一个
        }
    }
    public static void main(String agrs[]){
        Test test = new Test();
        test.operation();
    }
}

6、说明

A:定义:Iterator模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部情况。
B:在本例中,老师(Teacher)给出了创建点名(Iterator)对象的接口,点名(Iterator)定义了遍历同学出勤情况所需的接口。
C:Iterator模式的优点是当(ConcreteTeacher)对象中有变化是,比如说同学出勤集合中有加入了新的同学,或减少同学时,这种改动对客户端是没有影响的。

标签:Java,设计模式,迭代模式,Iterator模式
0
投稿

猜你喜欢

  • C#使用集合实现二叉查找树

    2023-06-01 06:17:21
  • Java JVM字节码指令集总结整理与介绍

    2021-09-18 17:10:20
  • unity实现翻页效果

    2022-09-01 17:10:15
  • Jetpack Compose 的新型架构 MVI使用详解

    2023-01-24 14:53:26
  • Java实战之敏感词过滤器

    2022-01-18 10:32:03
  • 基于C#中XmlWriter写入Xml的深入分析

    2021-06-29 10:00:54
  • C#算法之无重复字符的最长子串

    2021-05-24 21:56:59
  • Android 无障碍服务 performAction 调用过程分析

    2023-05-03 12:06:17
  • 深入理解Java并发编程之ThreadLocal

    2023-11-21 02:43:42
  • Java基于ArrayList实现群主发红包功能

    2022-04-06 20:34:09
  • 关于Java整合RocketMQ实现生产消费详解

    2022-12-31 07:44:34
  • Android制作漂亮自适布局键盘的方法

    2022-08-04 09:14:53
  • FastJSON字段智能匹配踩坑的解决

    2022-07-29 19:32:26
  • Android 实现切圆图作为头像使用实例

    2023-04-29 04:08:08
  • Eclipse自定义启动画面和图标的方法介绍

    2022-05-14 09:27:13
  • 通过Java连接SQL Server数据库的超详细操作流程

    2022-08-01 12:46:01
  • C#中OpenCvSharp 通过特征点匹配图片的方法

    2023-07-14 08:10:55
  • jdbc+jsp实现简单员工管理系统

    2021-08-31 23:08:15
  • Java实现生成JSON字符串的三种方式分享

    2022-05-20 15:21:31
  • Spring的Aware接口你知道多少

    2023-01-19 12:44:20
  • asp之家 软件编程 m.aspxhome.com