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);
}
}
执行结果:
电视机频道:
湖南卫视
北京卫视
上海卫视
逆向遍历电视机频道:
上海卫视
北京卫视
湖南卫视

JAVA设计模式之【迭代器模式】的更多相关文章
- 折腾Java设计模式之迭代器模式
迭代器模式 Provide a way to access the elements of an aggregate object sequentially without exposing its ...
- 16.java设计模式之迭代器模式
基本需求: 展示一个学校的结构,比如一个学校下面有多个学院,学院下面有多个系,对其节点主要是遍历,与组合模式略有不同 传统方案: 学校<-学院<-系 依次继承 这种方式,在一个页面中展示出 ...
- 简单的了解下Java设计模式:迭代器模式(转载)
迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. Java 开发过程中遍历是常用的.如下边程序: for(int i =0 ; ...
- java设计模式之迭代器模式
一.迭代器模式简介 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露内部的表示.把游走的任务放在迭代器上,而不是 ...
- Python进阶:设计模式之迭代器模式
在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- 实践GoF的设计模式:迭代器模式
摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...
随机推荐
- poj--1985--Cow Marathon(树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4424 Accepted: 2214 Case ...
- 【POJ 1704】 Georgia and Bob
[题目链接] http://poj.org/problem?id=1704 [算法] 阶梯博弈 [代码] #include <algorithm> #include <bitset& ...
- ACM/OI 出题用
之前出题,很苦恼出数据和检查程序,因为很多繁琐的工作,还很可能小手一抖出问题. 最近又在出题...想起之前的对拍脚本,感觉不能更方便,于是撸了一套出题用的小工具,也学习了一点点的DOS命令 首先是输入 ...
- html 中表单元素input type="hidden"的作用
转自:https://blog.csdn.net/xiaobing_122613/article/details/54946559 (隐藏只是在网页页面上面不显示输入框,但是虽然隐藏了,还是具有for ...
- UIimageView和UIimage的小区别
UIimageView 用来显示一张图片或者显示一组动画图片 UIimage 不是一个控件,只是一个普通的类,用来生成一张图片,只单纯的生成一张图片,图片只会被加载到内存,如果想要让用户 ...
- Ubuntu16.04系统安装搜狗输入法
前言:正常双击.deb软件包安装搜狗输入法会有bug,需要按照下面操作进行消除错误. 一.下载搜狗输入法Linux版软件包 下载地址为:http://pinyin.sogou.com/linux/ , ...
- windows下git server搭建
使用gitblit1.8搭建 首先要安装JDK 然后下载gitblit,这里给一个CSDN下载 https://download.csdn.net/download/nietzsche0/104826 ...
- java文件名与class关系
class与文件名没有必要关系但是public class是要绝对保持一致 例如:class test{ public static void main(String args[]){ System. ...
- echarts的下载为excel小工具
echarts自带有下载为图片的功能,但是没有下载为excel表格的功能,个人觉得下载为表格更为需要,所以写了个工具,此工具应用有局限性,只能用于柱形图和折线图,option的series要是如下形式 ...
- jq——css类
1 addClass(classname) 添加类 <script type="text/javascript"> $("input").clic ...