迭代器模式[通俗易懂]

迭代器模式

大家好,又见面了,我是全栈君。

迭代器模式
,提供一种方法顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

迭代器模式为遍历不同的聚集结构提供如開始、下一个、是否结束、当前哪一项等统一的接口。


应用场景:

  1. 当你须要訪问一个聚集对象。并且无论这些对象是什么都要遍历一遍的时候,你就应该考虑使用迭代器模式。

  2. 当你须要对聚集对象有多种遍历时。能够考虑使用迭代器模式。
长处:

迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既能够做到不暴露集合内部结构。又可让外部代码透明的訪问集合内部的数据。

迭代器模式[通俗易懂]

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

template<typename T >
class Iterator
{
public:
        virtual ~Iterator(){};
        virtual void First() = 0;
        virtual void Next() = 0;
        virtual bool IsDone() const = 0;
        virtual  T* CurrentItem() = 0;
};

template<typename T >
class ConcreteAggregate ;

template<typename T >
class Aggregate
{
public:
        virtual ~Aggregate() {};
        virtual Iterator< T>* CreateIterator() = 0;
};

template<typename T >
class ConcreteIterator :public Iterator <T >
{
private:
        ConcreteAggregate<T >* m_pAggre;
        int current = 0;
public:
        virtual ~ConcreteIterator()
       {
               delete m_pAggre;
       }
       ConcreteIterator( ConcreteAggregate<T >* pAggre ) :m_pAggre(pAggre), current(0)
       {}

        virtual void First()
       {
              current = 0;
       }

        virtual void Next()
       {
               if (current < m_pAggre->GetLen())
                     ++current;
       }

        virtual bool IsDone() const
       {
               return (current >= m_pAggre->GetLen());
       }

        virtual T* CurrentItem()
       {
               if (current <= m_pAggre->GetLen())
                      return &(*m_pAggre)[current];
               else
                      return NULL;
       }

};

template<typename T >
class ConcreteAggregate :public Aggregate <T >
{
private:
        vector< T> m_Data;
public:
       ConcreteAggregate()
       {
              m_Data.push_back(1);
              m_Data.push_back(2);
              m_Data.push_back(3);
       }

        virtual Iterator< T>* CreateIterator()
       {
               return new ConcreteIterator<T >(this );
       }

        T& operator[]( int index)
       {
               return m_Data[ index];
       }

        int GetLen()
       {
               return m_Data.size();
       }
};

// IteratorPattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Iterator.h"
#include <iostream>

int _tmain (int argc , _TCHAR * argv [])
{
        Aggregate< int>* pAgg = new ConcreteAggregate<int >();
        Iterator< int>* it = pAgg->CreateIterator();
        for (it->First(); !it->IsDone(); it->Next())
       {
              std::cout <<*( it->CurrentItem() )<< std::endl;
       }

       getchar();
        return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115630.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 无线充电Qi通信协议分析

    无线充电Qi通信协议分析无线充电Qi通信协议分析

    2022年6月15日
    151
  • 关于spring boot 事务

    关于spring boot 事务

    2021年5月12日
    140
  • python定义函数求和_Python定义函数实现累计求和操作

    python定义函数求和_Python定义函数实现累计求和操作一、使用三种方法实现0-n累加求和定义函数分别使用while循环、for循环、递归函数实现对0-n的累加求和1、使用while循环定义一个累加求和函数sum1(n),函数代码如下:2、使用for循环定义一个累加求和函数sum2(n),函数代码如下:3、使用递归函数定义一个累加求和函数sum3(n),函数代码如下:二、使用了三种实现累加求和的方法,分别定义了三个函数。1、对0-100实现累加求和,…

    2025年6月27日
    4
  • cpu流水线工作原理_嵌入式工作原理

    cpu流水线工作原理_嵌入式工作原理现在的CPU处理器一般都是超流水线工作,动不动就是10级以上流水线,超高主频,这两者之间有什么关系呢?今天就跟大家科普下CPU流水线的工作原理,以及他们之间的关系。说到流水线,很多人会想到富士康;说到富士康,很多人会想到张全蛋。作为富士康3号流水线资深质检员,下面就请张全蛋给大家科普下什么是流水线,大家鼓掌欢迎。MichealJack眼中的流水线大家好,我是张全蛋,英文名叫MichealJack,法文名叫霍雷呆-杰Q赖,大家也可以叫我查理。作为iPhone手机3号流水线的资.

    2022年8月20日
    7
  • Geohash算法原理及实现

    Geohash算法原理及实现

    2022年2月20日
    64
  • 海量数据处理技巧

    海量数据处理技巧数据时代来临,数据量的爆炸式增长是最为显著的特征。当高性能硬件的普及还跟不上这样的数据大潮时,如何在有限的时空资源内处理海量数据成为了计算机科学以及数理统计等领域最大的挑战。所谓“数据处理”,在本文中特指通过计算机技术,对海量数据进行存储、统计、查询等操作。我将在下面介绍一些基本的海量数据处理的方法,供大家参考。需要明确的一点是,现实情况复杂多变,所以对于海量数据处理这样大的主题,是不可能用一…

    2022年6月23日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号