迭代器模式
聚合类,聚合对象
电视机遥控器,迭代器,遍历局和对象中的成员
灵活新增遍历方法
将负责遍历数据的方法提取出来,封装到专门的类中,实现数据存储和数据遍历分离。这就是迭代器模式。
灵活性,可扩展性,避免类职责过多
角色
抽象迭代器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);
}
}

执行结果:

电视机频道:

湖南卫视

北京卫视

上海卫视


逆向遍历电视机频道:

上海卫视

北京卫视

湖南卫视

JAVA设计模式之【迭代器模式】的更多相关文章

  1. 折腾Java设计模式之迭代器模式

    迭代器模式 Provide a way to access the elements of an aggregate object sequentially without exposing its ...

  2. 16.java设计模式之迭代器模式

    基本需求: 展示一个学校的结构,比如一个学校下面有多个学院,学院下面有多个系,对其节点主要是遍历,与组合模式略有不同 传统方案: 学校<-学院<-系 依次继承 这种方式,在一个页面中展示出 ...

  3. 简单的了解下Java设计模式:迭代器模式(转载)

    迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. Java 开发过程中遍历是常用的.如下边程序: for(int i =0 ; ...

  4. java设计模式之迭代器模式

    一.迭代器模式简介 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露内部的表示.把游走的任务放在迭代器上,而不是 ...

  5. Python进阶:设计模式之迭代器模式

    在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...

  6. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  7. 实践GoF的设计模式:迭代器模式

    摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...

  8. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  9. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  10. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

随机推荐

  1. R语言基础-数组和列表

    数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, dim),当中data必须 ...

  2. Android圆角Tag控件的另类实现

    一般的圆角标签控件都是用xml设置shape做实现.可是假设我们想要做一个更加强大通用的的圆角控件,不须要使用者去关心圆角,仅仅设置背景就能够了. 应该怎么实现呢?这个就须要把背景先设置成图片,然后再 ...

  3. Ubuntu 16.04 安装 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qt

    tcpdump 的抓包保存到文件的命令参数是-w xxx.cap   抓eth1的包  tcpdump -i eth1 -w /tmp/xxx.cap    抓 192.168.1.123的包  tc ...

  4. roscore不能启动

    通过VNC 在VNC窗口上出入 roscore  得到下面错误信息 ----------------------------------------------------------- proces ...

  5. Android开发实现QQ三方登录 标签: android开发qq三方登录

    本文分为两个部分:一是QQ的授权部分:二是获取用户的基本信息部分 一.授权部分 1.首先,先去腾讯开放平台获取APP ID和APP KEY(未注册腾讯开发者账号的可能需要先注册账号),获取的过程还是还 ...

  6. ng-repeat 中的 track by $index

    用ng-repeat指令遍历一个javascript数组,当数组中有重复元素的时候,angularjs会报错,这是因为ng-Repeat不允许collection中存在两个相同Id的对象. 对于数字或 ...

  7. 路飞学城Python-Day25

  8. 设置Django关闭Debug后的静态文件路由

    Django在Debug模式关闭掉后请求静态文件时,返回404相应码,后台的请求url是"GET /static/css/404.css HTTP/1.1" 404 1217,找不 ...

  9. C# 鼠标左右手切换

    using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...

  10. SQLserver 导入超大CSV(100G以上)方法

    1.似乎SQLSERVER2008对UTF8不兼容,采用SQLSERVER20052.采用SQLSERVER2005,还是出现UTF8诸如此类的问题,修改表结构,varchar改成 nvarchar3 ...