`

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 迭代设计模式

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

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

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

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

    Iterator Pattern(迭代模式)

    源代码(eclipse直接打开) 博文链接:https://futrueboy.iteye.com/blog/382010

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

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

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

    主要介绍了C#迭代器模式(Iterator Pattern),包括了迭代器的适用范围及用法实例,需要的朋友可以参考下

    .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#版 24种设计模式

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

    Java设计模式,并加上个人理解

    1. 设计模式 1.1 含义 1.2 作用 1.3 设计原则 ...14. 迭代器模式 (Iterator Pattern) 15. 享元模式 (Flyweight Pattern) 16. 桥接模式 (Bridge Pattern) 17. 观察者模式 (Observer Pattern)

    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) ...

    设计模式代码——c#

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

    C#设计模式(23种设计模式)

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

    用Java实现23种设计模式

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

    设计模式PPT

     迭代器模式(Iterator Pattern)  中介者模式(Mediator Pattern)  备忘录模式(Memento Pattern)  观察者模式(Observer Pattern)  状态模式(State Pattern)  策略模式(Strategy Pattern)  ...

    32种设计模式

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

    33种JAVA设计模式DEMO

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

Global site tag (gtag.js) - Google Analytics