博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之迭代器模式(行为型)
阅读量:2040 次
发布时间:2019-04-28

本文共 1700 字,大约阅读时间需要 5 分钟。

文章目录

一、模式定义

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor),所以迭代器模式是一种对象行为型。

二、模式角色

  • Iterator:抽象迭代器
  • ConcreteIterator:具体迭代器
  • Aggregate:抽象聚合类
  • ConcreteAggregate:具体聚合类

三、模式分析

对于迭代器模式来说,一个聚合可以有多个遍历。在迭代器模式中,提供了一个外部的迭代器对聚合对象进行访问和遍历,迭代器定义了一个访问聚合对象的接口,可以跟踪遍历元素,了解哪些元素已经遍历过而哪些没有。

迭代器模式中应用了工厂方法模式,聚合类充当工厂类,而迭代器充当产品类

迭代器模式本质

迭代器模式本质:将聚合对象存储的内部数据提取出来,封装到一个迭代器中,通过专门的迭代器来遍历聚合对象的内部数据,这就是迭代器模式的本质

聚合对象主要职责

聚合对象主要有两个职责:一是存储内部数据;二是遍历内部数据;最基本的职责还是存储内部数据

四、典型例子

例子来自:一书

自定义迭代器

自定义迭代器

Client:客户端调用
MyIterator:抽象迭代器
MyCollection:抽象聚合类
NewCollection:具体聚合类
NewIterator:具体迭代器

interface MyCollection{	MyIterator createIterator();}interface MyIterator{	void first();	void next();	boolean isLast();	Object currentItem();}class NewCollection implements MyCollection{   private Object[] obj={"dog","pig","cat","monkey","pig"};   public MyIterator createIterator()   {  	  return new NewIterator();   }      private class NewIterator implements MyIterator   {   	private int currentIndex=0;   	   	public void first()   	{   	  	currentIndex=0;   	}   		public void next()	{		if(currentIndex
0) { currentIndex--; } } public boolean isLast() { return currentIndex==obj.length; } public boolean isFirst() { return currentIndex==0; } public Object currentItem() { return obj[currentIndex]; } }}class Client{ public static void process(MyCollection collection) { MyIterator i=collection.createIterator(); while(!i.isLast()) { System.out.println(i.currentItem().toString()); i.next(); } } public static void main(String a[]) { MyCollection collection=new NewCollection(); process(collection); }}

五、适用场景

在以下的情况可以使用迭代器模式:

  • 访问一个聚合对象的内容而无须暴露它的内部表示。
  • 需要为聚合对象提供多种遍历方式。
  • 为遍历不同的聚合结构提供一个统一的接口。

转载地址:http://ybcof.baihongyu.com/

你可能感兴趣的文章
有趣的机器学习概念纵览:从多元拟合,神经网络到深度学习,给每个感兴趣的人
查看>>
K-近邻算法:KNN
查看>>
solver及其配置
查看>>
图说C++对象模型:对象内存布局详解
查看>>
【Java基础】Java类的加载和对象创建流程的详细分析
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java多线程知识点总结
查看>>
Java集合框架知识梳理
查看>>
java中IO流知识梳理
查看>>
word2010如何保持在公式后面键入空格后或添加文字不变小?
查看>>
笔试题(一)—— java基础
查看>>
笔试题(二)—— sql语句
查看>>
Redis学习笔记(二)— 在linux下搭建redis服务器
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Eclipse配置错误——An internal error occurred during: "Building workspace".GC overhead limit exceeded
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>