`

IteratorPattern

 
阅读更多

意图
提供一种方法顺序访问一个聚合对象中各个元素,而又不许暴露该对象的内部表示.
什么叫聚合对象--->就是类似与数组或集合的对象.
其实就是将一些对象放到一个聚合中,来一起组织它们,来遍历它,或者得到当前的某个元素.

 

适用性
1.访问一个聚合对象的内容而无须暴露它的内部表示.
聚合对象可能是数组或者集合,我们在迭代聚合对象的时候不需要知道它底层是用什么来表示的,也就是不需要知道用数组还是集合来表示的.不需要去关心它,我们只需要去迭代它,获得我想知道的元素.向使用者屏蔽了底层的一种实现机制.然后我们通过很简单的方法,把聚合对象里的内容得到.

 

2.支持对聚合对象的多种遍历.
从前往后遍历,从后往前遍历........

 

3.为遍历不同的聚合结构提供一个统一的接口(既,支持多态迭代)

 

构成
1.抽象迭代器(Iterator)角色:此抽象角色定义出遍历元素所需的接口.
比如:我要得到聚合对象第一个元素,得到最后一个元素,得到当前元素.当前元素的下一个元素提供了这些规范.

 

2.具体迭代器(ConcreteIterator)角色:此角色实现了Iterator接口,并保持迭代过程中游标的位置.
当我们去遍历或者迭代一个聚合对象的时候,我们必须要有一种机制去保证,我们当前迭代到什么位置上了,我们是否还有能力继续去迭代,也就是这个聚合对象是否已经遍历完了,我们需要一种这样的机制来控制,这种机制可以通过游标的方式来控制.游标就相当于一个数组的索引,或者是集合的下标.

 

3.聚集(Aggregate)角色:此抽象角色给出创建迭代器(Iterator)对象的接口迭代角色是对聚集迭代的,它们是有密切的关联的因此我们通过具体聚集角色去创建相应的具体迭代器角色.

 

4.具体聚集(ConcreteAggregate)角色:实现了创建迭代器(Iterator)对象的接口,维持了一组对象引用的一个聚集对象,返回一个合适的具体迭代器实例.
创建的具体迭代器角色就可以迭代相应的具体聚集角色,具体的迭代器角色一定要知道它是对谁来进行迭代的.具体的聚集角色和具体的迭代器角色是互相关联的一种关系,具体聚集角色创建具体迭代角色,然而具体迭代角色又知道对谁来进行迭代.

 

5.客户端(Client)角色:持有对聚集及其迭代子对象的引用,调用迭代子对象的迭代接口,也有可能通过迭代器操作聚集元素的增加和删除.
客户端角色可以创建聚集角色和相应的迭代器角色,然后通过迭代器角色去迭代相应的聚集角色.

 

ClassDiagram:

 

SequenceDiagrm:

 

 class Client
    {
        static void Main(string[] args)
        {
            ConcreteAggregate aggregate = new ConcreteAggregate();

            aggregate[0] = "Item A";
            aggregate[1] = "Item B";
            aggregate[2] = "Item C";
            aggregate[3] = "Item D";

            Iterator iterator = aggregate.CreateIterator();

            Console.WriteLine("First Element:" + iterator.First());

            Console.WriteLine("Next Element:" + iterator.Next());

            Console.WriteLine("Current Element" + iterator.CurrentItem());

            Console.WriteLine("---------------------------------------");

            while (iterator.HasNext())
            {
                Console.WriteLine(iterator.Next());
            }

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 迭代器角色
    /// </summary>
    abstract class Iterator
    {
        public abstract Object First();
        public abstract Object Next();
        public abstract Object CurrentItem();
        public abstract bool HasNext();
    }

    ///<summary>
    /// 具体迭代器角色
    ///</summary>
    class ConcreteIterator : Iterator
    {
        private int current = 0;
        ConcreteAggregate aggregate;
        public ConcreteIterator(ConcreteAggregate aggregate)
        {
            this.aggregate = aggregate;
        }

        public override object CurrentItem()
        {
            return aggregate[current];
        }

        public override object First()
        {
            return aggregate[0];
        }

        public override object Next()
        {
            return aggregate[current++];
        }

        public override bool HasNext()
        {
            return current != aggregate.Count;
        }

    }

    /// <summary>
    /// 聚集角色
    /// </summary>
    abstract class Aggregate
    {
        public abstract Iterator CreateIterator();
    }

    /// <summary>
    ///具体的聚集角色
    /// </summary>
    class ConcreteAggregate : Aggregate
    {
        private ArrayList list = new ArrayList();

        public override Iterator CreateIterator()
        {
            return new ConcreteIterator(this);
        }

        public int Count
        {
            get
            {
                return list.Count;
            }
        }

        public object this[int index]
        {
            get
            {
                return list[index];
            }
            set
            {
                list.Insert(index, value);
            }
        }
    }

 

 

  • 大小: 5 KB
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    IteratorPattern 迭代设计模式

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

    迭代器模式(Iterator Pattern)原理图

    迭代器模式(Iterator Pattern)是设计模式中的一种行为模式,它允许顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式提供了一种方法,可以顺序地访问一个聚合对象中的各个元素,而又...

    Iterator Pattern(迭代模式)

    "Iterator Pattern--Biscuit.png"可能是对迭代模式的可视化解释,通过图片可以更直观地看到各个角色及其交互。其他文件如`.classpath`、`.project`、`build.xml`、`Workspace.sws`等是Eclipse项目配置文件,它们与...

    设计模式(C#)之迭代器模式(Iterator Pattern)

    - **抽象迭代器(Iterator)**:定义了遍历元素的接口,包括初始化、判断是否还有下一个元素、获取当前元素和移动到下一个元素等方法。 - **具体迭代器(ConcreteIterator)**:实现了抽象迭代器接口,具体实现如何...

    设计模式(十七)——迭代器模式(Iterator Pattern)

    迭代器模式(Iterator Pattern) 基本介绍 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。 提供一种可以遍历聚合对象的方式。又...

    DesignPattern : Iterator

    迭代器模式(Iterator Pattern)是设计模式中行为模式的一种,主要解决访问聚合对象内容的问题,使得我们可以在不暴露其内部结构的情况下,顺序访问一个聚合对象的各个元素,而又不破坏其内部结构。这个模式在Java、...

    [行为型模式]迭代器模式的理解

    在给定的资源中,`IteratorPattern.cpp`和`IteratorPattern.h`是实现迭代器模式的源代码文件。通常,`IteratorPattern.cpp`包含类的实现细节,而`IteratorPattern.h`则包含类的声明和接口。这两个文件可能会定义以下...

    .NET设计模式(18):迭代器模式(IteratorPattern)

    Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、...

    C#迭代器模式(Iterator Pattern)实例教程

    本文以实例形式简单简述了C#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下: 一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种。 说到迭代,动作大致包括设置第一个...

    C#版 24种设计模式

    备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor ...

    Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现

    迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)是设计模式中的两种重要结构型模式,它们在软件设计中有着广泛的应用。这两种模式都属于GoF(Gang of Four)设计模式,旨在解决特定的问题,提升代码...

    C#设计模式_设计模式_C#_

    迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式...

    23种设计模式 (创建型,结构型,行为型)

    迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) ...

    Java源码分析:深入探讨Iterator模式

    为了遍历这些容器中的元素,Java引入了迭代器模式(Iterator Pattern),这是一种常用的设计模式,它提供了一种访问聚合对象的方法,而无需暴露其内部表示。本文将详细解析Iterator模式在Java中的实现原理,并通过...

    设计模式代码——c#

    15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. ...

    用Java实现23种设计模式

    迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式...

    factory strategy builder iterator

    4. **迭代器模式(Iterator Pattern)**: 迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。通过迭代器,用户可以遍历集合中的所有元素,而无需了解集合的内部...

Global site tag (gtag.js) - Google Analytics