centos OpenCV4 http matrix server ssis joomla notifications ios4 后台管理系统模板 pmp培训视频 jquery触发change事件 python转16进制 oracle查看数据库状态 excel动态图表制作 oracle连接字符串 windows杀进程命令 websocket库 mysql函数 mysql新建数据库 python中pop函数 python路径设置 java中的接口 java基础编程 java架构 linux教学 网页游戏代码 骁龙435 stata软件 stretchcolumns 迅雷去广告版 黑市商人 dnf武极刷图加点 淘宝图片下载 英雄联盟设置 pr蒙版怎么用 黑客攻防技术宝典 沉沦之城 黑道圣徒4去马赛克补丁 古特里克的杀生刀
当前位置: 首页 > 学习教程  > 编程语言

八. 迭代器模式

2021/1/28 23:20:01 文章标签:

一.内容说明 某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。绘制类图并编程实现。 二.设计类图 三.全部类代码 …

一.内容说明

某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。绘制类图并编程实现。

二.设计类图

在这里插入图片描述

三.全部类代码

//抽象迭代器类:
package iteratorpattern;

public interface Iterator {
     public boolean hasNext();
     public Object Next();
};
//具体迭代器类:
public class MyIterator implements Iterator{
         int index;
         public boolean hasNext(){
             if(index < names.length){
                  return true;
             }
                  return false;
             }

         public Object Next(){
             if(this.hasNext()){
                   return names[index++];
             }
                   return null;
             }
     }
    
    public class MyIterator2 implements Iterator{
        int flag = names.length-1;
        public boolean hasNext(){
            if(flag>-1){
                return true;
            }
            return false;
        }
        public Object Next(){
            if(this.hasNext()){
                return names[flag--];
            }
            return null;
        }
   }
//抽象聚合类:
package iteratorpattern;

public interface GoodsStore {
     public Iterator getMyIterator();
}
//具体聚合类:
public class MyGoodsStore implements GoodsStore{
     public String names[]={"铅笔","钢笔","圆珠笔","水彩笔","毛笔","圆规","橡皮"};

     public Iterator getMyIterator(){
         return new MyIterator();
     }

     public Iterator getMyIterator2(){
         return new MyIterator2();
}
}
//客户类:
package iteratorpattern;

public class Client {
     public static void main(String[] args) {
         MyGoodsStore mygoodsstore = new MyGoodsStore();
         System.out.println("向后遍历:");
         for(Iterator ite = mygoodsstore.getMyIterator();ite.hasNext();){
             String name = (String)ite.Next();
             System.out.println(""+name);
         }
         System.out.println("*******");
         System.out.println("向前遍历:");
         for(Iterator ite = mygoodsstore.getMyIterator2();ite.hasNext();){
             String name = (String)ite.Next();
             System.out.println(""+name);
         }
     }
}

四.运行结果

在这里插入图片描述

五.分析和总结

1.整体构造:
迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象既承担太多的责任了,面向对象设计原则中有一条就是单一职责原则,所有我们要尽可能地分离这些职责,用不同的类取承担不同的责任,迭代器模式就是用迭代器类来承担遍历集合的职责。

2.优点:
(1) 迭代器模式使得访问一个聚合对象的内容而无需暴露它的内部表示,即迭代抽象。
(2)迭代器模式为遍历不同的集合结构提供了一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。

3.缺点:
迭代器模式在遍历的同时更改迭代器所在的集合结构会导致出现异常。所以使用foreach语句只能在对集合进行遍历,不能在遍历的同时更改集合中的元素。


本文链接: http://www.dtmao.cc/news_show_650171.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?