电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现。

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(5);System.out.println("逆向遍历电视机频道:");while(!i.isFirst()){i.previous();System.out.println(i.currentChannel().toString());}}public static void main(String a[]){Television tv;tv=(Television)XMLUtil.getBean();display(tv);System.out.println("--------------------------");reverseDisplay(tv);}
}
public class SkyworthTelevision implements Television
{private Object[] obj={"CCTV-1","CCTV-2","CCTV-3","CCTV-4","CCTV-5","CCTV-6","CCTV-7","CCTV-8"};public TVIterator createIterator(){return new SkyworthIterator();}private class SkyworthIterator 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;}}
}
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;}}
}
public interface Television
{TVIterator createIterator();
}
public interface TVIterator
{void setChannel(int i);void next();void previous();boolean isLast();Object currentChannel();boolean isFirst();
}
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean(){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;                           doc = builder.parse(new File("config.xml")); //获取包含类名的文本节点NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c.newInstance();return obj;}   catch(Exception e){e.printStackTrace();return null;}}
}
配置文件
<?xml version="1.0"?>
<config><className>SkyworthTelevision</className>
</config>

迭代器模式实例与解析---实例:电视机遥控器相关推荐

  1. 桥接模式实例与解析 实例一:模拟毛笔

    桥接模式实例与解析   实例一:模拟毛笔           现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类.而 ...

  2. 命令模式实例与解析--实例一:电视机遥控器

    电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作.抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作 ...

  3. 迭代器模式源码解析(jdk+mybatis)

    自己实现的数据结构,迭代器在源码中的一些应用,java.util.Iterator接口,/*** An iterator over a collection. {@code Iterator} tak ...

  4. 组合模式实例与解析 实例一:水果盘

    实例一:水果盘 在水果盘(Plate)中有一些水果,如苹果(Apple).香蕉(Banana).梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘 ...

  5. 模板方法模式实例与解析--实例一:银行业务办理流程

    在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分.无论具体业务是取款.存款还是转账,其基本流程都一样.现使用模板方法模式模拟银行业务办理流程 ...

  6. 享元模式实例与解析实例二:共享网络设备(有外部状态)

    实例二:共享网络设备(有外部状态) 虽然网络设备可以共享,但是分配给每一个终端计算机的端口(Port)是不同的,因此多台计算机虽然可以共享同一个网络设备,但必须使用不同的端口.我们可以将端口从网络设备 ...

  7. 装饰模式实例与解析 实例一:变形金刚

    实例一:变形金刚 变形金刚在变形之前是一辆汽车,它可以在陆地上移动.当它变成机器人之后除了能够在陆地上移动之外,还可以说话:如果需要,它还可以变成飞机,除了在陆地上移动还可以在天空中飞翔. publi ...

  8. 遍历聚合对象中的元素——迭代器模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/9992005 20世纪80年代,那时我家有一台"古老的"电视机,牌子我忘 ...

  9. 设计模式-迭代器模式

    1.引言 在软件开发中,也存在大量类似电视机一样的类,它们可以存储多个成员对象(元素),这些类通常称为聚合类(Aggregate Classes),对应的对象称为聚合对象. 聚合对象:聚合对象拥有两个 ...

最新文章

  1. Visual Studio附加到进程调试
  2. 4e4 Coursework decomposition
  3. 【Python】判断列表 list 是否为空
  4. <读书笔记> Thinking in python (Python 设计模式) 1. Singlton的c++与python的实现
  5. SQL语句之left join、right join、inner join的区别
  6. tomcat的jdbc连接池PoolExhaustedException 1
  7. 《ArcGIS Runtime SDK for .NET开发笔记》 --Hello Word
  8. Linux系统C语言获取所有CPU核心的利用率“/proc/stat”
  9. nodejs文件的读取
  10. Android Studio + TensorFlow lite 0.1.7
  11. Microsoft软件保护平台服务一直占用大量CPU资源
  12. 深度学习之图片压缩技术
  13. 免费在线格式转换网站
  14. itext文本域自动换行_iText+Flying Saucer生成pdf文档,中文不显示和不自动换行问题...
  15. java异常之-ClassNotFoundException: .......web.context.ContextLoaderServlet
  16. 关于excel中的超长数字显示方法
  17. 在您所指定的角色服务器,指定 RD 会话主机服务器的远程桌面授权模式
  18. 推导:从傅里叶级数展开到傅里叶变换
  19. 反超7-11!中国新的“便利店之王”即将诞生!
  20. 欧拉法、改进的欧拉法、龙格-库塔法求解初值问题

热门文章

  1. oracle索引扫描的种类,Oracle 系列之索引(Index)
  2. RV1126笔记九:RTMP服务器搭建
  3. 进门985,出来专科生!“醉生梦死”的大学生啊,醒醒吧!
  4. 神秘永远的《加州旅馆》
  5. 126页5万字智慧园区建设方案
  6. 一次500行SQL的优化
  7. 比例电磁阀(一)介绍和流量特性
  8. 单点登录技术:微软Passport单点登录协议和自由联盟规范
  9. Algorand以2.4美元结束首轮拍卖,为私募价48倍
  10. 复旦微电子fpga数据手册_专注FPGA图像加速领域 深维科技跨入发展快车道