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

    “该文引用自 CruiseYoung的:Visual Studio 2013编译ImageMagick http://blog.csdn.net/fksec/article/details/36008 ...

  2. 16.QT鼠标

    头文件 #include <QMouseEvent> #include <QStatusBar> #include <QLabel> protected: //鼠标 ...

  3. 移动端H5页面编辑器开发实战--经验技巧篇

    很久前的写的文章了,转载下发到这里 原本地址: https://blog.csdn.net/tech_meizu/article/details/52484775

  4. Python 对象初识

    # Demo1class Penson: animal = 'big mom' plant = 'flower' def __init__(self,name,age,sex,job): self.n ...

  5. 开发辅助 | 前端开发工程师对 UI设计、交互设计的认知

    1.UI 用户界面 UI:User Interfase 用户界面 UID:User Interfase Designer 用户界面设计师,多指移动 app 的界面设计: 2.一个合格的 UI 设计师, ...

  6. PostgreSQL练习网站

    PostgreSQL练习 http://pgexercises.com/index.html

  7. markdown写作软件推荐

    最近发现了一款不错的编辑器,而且是全平台支持的.与其它一些 markdown 编辑器最大的不一样是——所见即所得,不再是一边源文件一遍预览的方式了. 总的说来 Typora 很赞,推荐一波. 点此前往 ...

  8. Uva 11324 The Largest Clique【强连通 DAG动规 spfa】

    白书上的例题 做一遍tarjan后,缩点,每一个scc节点的权为它的结点数,做一次DAG上的动规,求出路径上的最大点权和,就可以了 #include<cstdio> #include< ...

  9. 斯特林公式--取N阶乘近似值

    斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候, ...

  10. BZOJ 2118 墨墨的等式 (同余最短路)

    题目大意:已知B的范围,求a1x1+a2x2+...+anxn==B存在非负正整数解的B的数量,N<=12,ai<=1e5,B<=1e12 同余最短路裸题 思想大概是这样的,我们选定 ...