开发者社区> 桃子红了呐> 正文

JAVA设计模式之【迭代器模式】

简介:
+关注继续查看
迭代器模式    聚合类,聚合对象    电视机遥控器,迭代器,遍历局和对象中的成员    灵活新增遍历方法    将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离。这就是迭代器模式。    灵活性,可扩展性,避免类职责过多    角色        抽象迭代器Iterator            定义访问和遍历数据的接口        具体迭代器ConcreteIterator            实现接口,完成对聚合对象的遍历            通过游标来记录当前位置        抽象聚合类Aggregate            用于存储和管理元素对象,有一个createIterator方法,用于创造迭代器        具体聚合类ConcreteAggregate            实现createIterator方法

看例子,电视遥控器遍历数据

1.迭代器接口,抽象迭代器

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public interface Television {
    TVIterator createIterator();
}

2.电视接口,抽象聚合类

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public interface Television {
    TVIterator createIterator();
}

3.具体聚合类和迭代器类

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public class TCLTelevision implements Television{
    private Object[] obj = {"湖南卫视","北京卫视","上海卫视"};
    public TVIterator createIterator() {
        return new TCLIterator();
    }

    class TCLIterator implements TVIterator {
        private int currentIndex = 0;
        public void next() {
            if (currentIndex < obj.length) {
                currentIndex ++ ;
            }
        }

        public void previous()
        {
            if(currentIndex>0)
            {
                currentIndex--;
            }
        }

        public void setChannel(int i)
        {
            currentIndex=i;
        }


        public Object currentChannel()
        {
            return obj[currentIndex];
        }

        public boolean isLast()
        {
            return currentIndex==obj.length;
        }

        public boolean isFirst()
        {
            return currentIndex==0;
        }
    }
}

4.客户端

package Iterator;

/**
 * Created by Jiqing on 2016/10/27.
 */
public class Client {
    public static void display(Television tv) {
        TVIterator i = tv.createIterator();
        System.out.println("电视机频道:");
        while (!i.isLast()) {
            System.out.println(i.currentChannel().toString());
            i.next();
        }
    }

    public static void reverseDisplay(Television tv) {
        TVIterator i = tv.createIterator();
        i.setChannel(3);
        System.out.println("逆向遍历电视机频道:");
        while(!i.isFirst())
        {
            i.previous();
            System.out.println(i.currentChannel().toString());
        }
    }

    public static void main(String a[])
    {
        Television tv;
        tv= new TCLTelevision();
        display(tv);
        System.out.println("--------------------------");
        reverseDisplay(tv);
    }
}

执行结果:

电视机频道:
湖南卫视
北京卫视
上海卫视
--------------------------
逆向遍历电视机频道:
上海卫视
北京卫视
湖南卫视

422101-20161027004421906-1830286910.png



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6002502.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
云服务器部署后台过程记录
现做毕业设计,使用前后端分离的设计模式,后端完成后为方便后续调用以及维护,将后端打包后部署到ECS云服务器上,在此介绍部署流程及一些问题。
5 0
【XML入门】一篇文章让你从没听过到熟练运用
今天我们继续来学习【Java Web】部分的XML,XML相比其他部分来时还是非常简单的。我们在以后写大项目时候也会经常用到,所以说还是蛮重要的。
6 0
iOS逆向 01:初识汇编
iOS逆向 01:初识汇编
5 0
SpringMVC面试题大总结
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
6 0
微信小游戏开发实战13-随机生成形状功能的实现
**微信小游戏开发实战系列的第13篇,点击上方的#微信小游戏开发实战话题可以查看本系列的所有内容。 本节内容包括:通过使用列表来实现可以设置权重的随机功能,以及游戏中的随机生成形状功能的具体实现。
5 0
想做个答题类的微信小游戏?读这篇文章就够了
**这是小蚂蚁游戏开发公众号原创的第71篇。 本文重要内容包含答题类小游戏的制作原理和制作方法,在掌握实现原理和方法后,你也能够根据自己的需要,制作自己的答题类小游戏。
5 0
微信小游戏开发实战14-闯关模式的实现
**这是微信小游戏开发实战系列的第14篇,点击上方的#微信小游戏开发实战话题可以查看本系列的所有内容。 本文主要内容是介绍精致1010闯关模式的设计和实现思路。
4 0
Swift-进阶 13:协议Protocol
Swift-进阶 13:协议Protocol
6 0
Swift-进阶 14:泛型
Swift-进阶 14:泛型
6 0
阿里云ecs服务器使用体验
配置后端开发环境redis和mysql环境
4 0
4269
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载