`
flustar
  • 浏览: 96774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式学习笔记(十三)—Iterator迭代器模式

阅读更多

Iterator模式定义:
提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。
这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。今天面试考到设计模式,我愣是没答上来,我晕死,自己这几天刚学的东西,自己也都理解,可一到考试的时候不是忘了就是回答的不准确,自己也不清楚到底是为什么,哎,伤心。。。。。。,下面是Iterator模式的结构图:

 在这个结构图中的Aggregate抽象类也可以定义成接口。下面给出一个例子来说明Iterator模式的使用。
import java.util.ArrayList;

interface Iterator<E>{
 public void first();
 public void next();
 public E currentItem();
 public boolean isDone();
}
class ConcreteIterator<E> implements Iterator<E>{

 private ConcreteAggregate<E> agg;
 private int index=0;
 private int size=0;

    public ConcreteIterator( ConcreteAggregate<E> aggregate) {
  this.agg=aggregate;
  this.index=0;
  this.size=aggregate.size();
 }

 public E currentItem() {
  return agg.getElement(index);
 }

 public void first() {
  index=0;
 }

 public boolean isDone() {
  if(index>=size){
   return true;
  }
  return false;
 }

 public void next() {
  if(index<size){
   index++; 
     }
 
    }
}
abstract class Aggregate<E>{
 
 protected abstract Iterator createIterator();
}
class ConcreteAggregate<E> extends Aggregate<E>{
 private ArrayList<E> arrayList=new ArrayList<E>();
 public Iterator createIterator() {
  
  return new ConcreteIterator<E>(this);
 }
 public void add(E o){
  arrayList.add(o);
 }
 public E getElement(int index) {

       if (index<arrayList.size()) {

         return arrayList.get(index);

       } else {

         return null;

       }

    }

    public int size(){

       return arrayList.size();

    }


}

public class Client {

 public static void main(String[] args) {
  ConcreteAggregate<String> aggregate=new ConcreteAggregate<String>();
  aggregate.add("A");
  aggregate.add("B");
  aggregate.add("C");
  aggregate.add("D");
  aggregate.add("E");
  Iterator iterator=aggregate.createIterator();
  for(iterator.first();!iterator.isDone();iterator.next()){
   System.out.println(iterator.currentItem());
  }
  
 }
}
输出结果:
A
B
C
D
E
在这个例子中,我们按照Iterator模式的结构图来创建的例子,我们创建的集合ConcreteAggregate可以存放任何类型的数据,然后使用createIterator方法转换成Iterator对象,使用Iterator对象来按顺序显示集合中的内容。这个模式在Java的jdk中是这样实现的,所以的集合类都实现了Iterable接口,这个接口中有一个iterator方法可以把集合类的对象转换成Iterator类的对象。明白这个原理可以更好的理解Java中的集合类和迭代器,根据这个可以创建功能更加强大的集合类。
小结:Iterator模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。

分享到:
评论

相关推荐

    C#学习笔记整理-迭代器模式介绍

    迭代器模式是一种设计模式,它在软件开发中用于顺序访问聚合对象(如列表、集合等)的元素,而无需暴露其内部结构。这种模式允许在不同的聚合对象间使用相同的遍历逻辑,增强了代码的可复用性和灵活性。 在C#中,...

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    Java 版设计模式学习笔记-java-design-patterns.zip

    这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...

    设计模式学习笔记

    4. 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而不暴露其底层表示。 5. 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 6. 备忘录模式(Memento):在不破坏封装性的...

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    GoF 23种设计模式学习笔记

    "GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    300Java设计模式部分学习笔记

    2. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 3. 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。 4. 命令模式...

    设计模式 笔记(附带代码)

    迭代器模式是一种行为设计模式,它能顺序访问聚合对象的元素,而无需暴露其底层表示。迭代器模式提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。这样,客户端代码可以一致地遍历多种数据结构,而...

    台湾人写的设计模式笔记

    它们包括:责任链(Chain of Responsibility)、命令(Command)、解释器(Interpreter)、迭代器(Iterator)、中介者(Mediator)、备忘录(Memento)、观察者(Observable/Observer)、状态(State)、策略(Strategy)、模板方法...

    设计模式的读书总结笔记

    3. 行为型模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、责任链模式(Chain of Responsibility)、命令模式(Command...

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    - **迭代器模式**(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 - **中介者模式**(Mediator):用一个中介对象来封装一系列的对象交互。 - **备忘录模式**(Memento...

    Java设计模式尚硅谷笔记

    15. 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 16. 访问者模式(Visitor):在不改变集合元素的前提下,为集合增加新的操作。 17. 命令模式(Command):将请求封装为...

    图解Java设计模式笔记总结word版本.rar

    - **行为型模式**:如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、命令(Command)、责任链(Chain of Responsibility)、备忘录(Memento)、...

    Python学习笔记(五)——–Python迭代器

    迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。 关键点:遍访(遍历?)容器 二、迭代器特点 1.迭代器可以...

    23种设计模式的解析与Cpp实现

    - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而不暴露其底层表示。 - 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 - 备忘录模式(Memento):在不破坏封装性的...

    Head First 设计模式 扫描版

    行为型模式则关注对象间的责任分配和交互,例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录...

    设计模式笔记设计模式笔记

    - 在Java集合框架中,大量使用了设计模式,例如List接口使用了迭代器模式,AbstractList使用了模板方法模式。 - Spring框架中,依赖注入(DI)和控制反转(IoC)就是基于工厂模式和代理模式实现的。 - 在多线程...

Global site tag (gtag.js) - Google Analytics