• 迭代器模式


    学习了设计模式中的迭代器模式,看了一些博客,理解以后,做个笔记进行总结。

    至于迭代器模式的优点和缺点,网上有一堆,这篇博客就说说使用迭代器模式是什么样子,怎么使用吧。

    迭代器模式里有4个角色:

    1.抽象迭代器,换句话说就是可以有具体的迭代器实现它。一般来说会有这么两个方法:取得下一个元素的方法next()和判断是否遍历结束的方法hasNext()

    2.具体迭代器,就是实现抽象迭代器

    3.抽象容器, 一般是一个接口,提供一个iterator()方法

    4.具体容器

    这里要举个例子说明一下:有个盆或者缸(这两个当然就是具体容器啦),里面有很多东西,当要遍历查看里面的东西时,需要勺子或者筷子(这两个就是具体迭代器了)去查看,这就是迭代器模式的基本内容

    用代码说话:

    首先,是一个抽象迭代器

    /**
     * 抽象迭代器,可以认为是勺子啊、筷子啊、叉子啊等等
     * @author Administrator
     *
     */
    public interface Iterator {
        boolean hasNext();
        Object next();
    }

    然后,是抽象容器

    /**
     * 抽象容器,比如缸,盆,碗等等,里面装的东西就是Object
     * @author Administrator
     *
     */
    public interface RongQi {
    
        public void add(Object obj);
        public Object get(int index);
        public Iterator iterator();
        public int getSize();
    }

    再然后,是具体迭代器和具体容器

    /**
     * 具体迭代器,勺子。遍历容器里的Object那些内容
     * @author Administrator
     *
     */
    public class ShaoZi implements Iterator {
    
        private RongQi rq;
        private int index;
        
        public ShaoZi(RongQi rongqi) {
            this.rq = rongqi;
        }
        
        @Override
        public boolean hasNext() {
            // TODO Auto-generated method stub
            if(index >= rq.getSize()) {
                return false;
            }else {
                return true;
            }
        }
    
        @Override
        public Object next() {
            // TODO Auto-generated method stub
            Object object = rq.get(index);
            index++;
            return object;
        }
    
    }
    /**
     * 具体容器,碗。里面装的东西都是Object
     * @author Administrator
     *
     */
    public class Wan implements RongQi{
    
        private Object[] rongqi;
        private int size = 0;
        private int index = 0;
        
        public Wan() {
            index = 0;
            size = 0;
            rongqi = new Object[100];
        }
        
        @Override
        public void add(Object obj) {
            // TODO Auto-generated method stub
            rongqi[index++] = obj;
            size++;
        }
    
        @Override
        public Object get(int index) {
            // TODO Auto-generated method stub
            return rongqi[index];
        }
    
        @Override
        public Iterator iterator() {
            // TODO Auto-generated method stub
            return new ShaoZi(this);
        }
    
        @Override
        public int getSize() {
            // TODO Auto-generated method stub
            return size;
        }
    
    }

    最后,是主程序

    public class MainApp {
    
        public static void main(String[] args) {
            // 新建一个容器,碗,往里面加上a,B,c
            RongQi rq = new Wan();
            rq.add("a");
            rq.add("B");
            rq.add("c");
            // 这是容器碗的迭代器---勺子
            Iterator it = rq.iterator();
            // 用勺子遍历碗里面的东西
            while(it.hasNext()) {
                System.out.println(it.next());
            }
        }
    }

    运行结果为:

    a

    B

    c

    以上就是迭代器模式简单的例子,还要继续学习下去。。

  • 相关阅读:
    717 汉诺塔的非递归实现 (25分)
    JSP入门[续]
    JSP运行原理和九大隐式对象
    JSP入门
    Mysql基本命令
    DataGridView数据导出为Excel
    sql server 2005中如何添加外键
    自定义配置文件的读取
    WinForm(C#)CheckedlistBox绑定数据,并获得选中的值(ValueMember)和显示文本(DisplayMember
    No CurrentSessionContext configured Hibernate
  • 原文地址:https://www.cnblogs.com/miantiaoandrew/p/7905863.html
Copyright © 2020-2023  润新知