`
eneasy
  • 浏览: 128374 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

迭代子模式

阅读更多
十八. 迭代子模式
整理自 《java与模式》阎宏编著


1.意图:

    提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。

2.类图:
  
                                 

3.原理:  

4.特征:

    抽象迭代子(Iterator)角色:此抽象角色定义出遍历元素所需的接口。

    具体迭代子(ConcreteIterator)角色:此角色实现了接口,并保持迭代过程中的游标位置。

    聚集(Aggregate)角色:此抽象角色给出创建迭代子对象的接口。

    具体聚集(ConcreteAggregate)角色:实现了创建迭代子对象的接口,返回一个合适的具体迭代子实例。

    客户端(Client)角色:持有对聚集及其迭代子对象的引用,调用迭代子对象的迭代接口,也有可能通过迭代子操作聚集元素的增加和删除。
5.说明:

    迭代子模式将迭代逻辑封装到一个独立的迭代子对象中,从而与聚集本身分割开,它是对遍历的抽象化。  

    本例是“白箱”实现,对于“黑箱”实现参见《java与模式》。 

6.使用案例:

7.代码:

//聚集(Aggregate)角色 Aggregate.java

public interface Aggregate

{

     /**

      * 工厂方法,返回一个迭代子对象。

      * @return Iterator

      */

     public Iterator createIterator();

}



抽象迭代子(Iterator)角色 Iterator.java

public interface Iterator

{

     public void first();

     public void next();

     public boolean hasMore();

     public Object currentItem();

}



//具体迭代子(ConcreteIterator)角色  ConcreteIterator.java

public class ConcreteIterator implements Iterator



     private ConcreteAggregate aggregate;

     private int index;

     private int size;



     public ConcreteIterator(ConcreteAggregate aggregate)

     {

         this.aggregate = aggregate;

         index = 0;

         size = aggregate.getSize();

     }

     public void first()

     {

         index = 0;

     }

     public void next()

     {

         if(index < size)

              index ++;

     }

     public boolean hasMore()

     {

         return (index >= size);

     }

     public Object currentItem()

     {      

         return aggregate.getElement(index);

     }

}



//具体聚集(ConcreteAggregate)角色 ConcreteAggregate.java

public class ConcreteAggregate implements Aggregate

{

    private Object[] obj = new Object[]{"a","b","c","d"};

     public Iterator createIterator()

     {

         return new ConcreteIterator(this);

     }

   

     public Object getElement(int index)

     {

         if(index < obj.length)

         {

              return obj[index];

         }

         else

              return null;

     }

   

     public int getSize()

     {

         return obj.length;

     }

}
分享到:
评论

相关推荐

    IteratorPattern 迭代设计模式

    迭代器模式(IteratorPattern)是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象元素的方法,同时又不暴露其底层表示。这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象...

    AspectJ实现设计模式(五)—迭代子模式

    本文介绍使用AspectJ实现设计模式之迭代子模式,文章以一个购买商品的例子实现AspectJ版本的内禀迭代子。由于迭代子模式应用广泛,文章在此不再赘述模式的具体内容了,我使用具体的例子说明如何使用AspectJ来完成...

    Iterator Pattern(迭代模式)

    迭代模式是一种行为设计模式,它允许我们通过统一的接口遍历集合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛使用,尤其是在集合类库中,如ArrayList、LinkedList等。下面我们...

    java迭代子模式详解

    迭代子模式(Iterator Pattern)是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如List、Set和Map等接口的实现。 在Java中,迭代器模式的...

    组合模式二叉树,前序、中序、后续,迭代器模式访问遍历

    在这个主题中,我们主要探讨了如何利用组合模式(Composite Pattern)构建二叉树,并通过迭代器模式(Iterator Pattern)来实现对树的遍历,包括前序、中序和后序遍历。这些是设计模式中的经典应用,对于理解和掌握...

    23种设计模式详解PDF

    设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): ...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    32设计模式.doc

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    java设计模式示例

    java设计模式示例 创建型模式(5种):工厂方法模式,...行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘...

    23种设计模式项目实例

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    23种设计模式实例

    总体来说设计模式分为三大类: ...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式例子

    23种Java设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    23种设计模式demo

    java的设计模式大体上分为三大类: ...行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    23个设计模式完整DEMO

    C#版的23个设计模式完整DEMO,包括: ...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    05-容易被忽略的迭代器(1).html

    迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( ...

    23种设计模式java源码

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。

    c#设计模式

    总体来说设计模式分为三大类: ...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    java常用23中设计模式

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。

Global site tag (gtag.js) - Google Analytics