`

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

 
阅读更多





头文件
//IteratorPattern.h

#ifndef INTERATOR_PATTERN_H
#define INTERATOR_PATTERN_H

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

namespace IteratorPattern
{
    template<class Item>
    class Iterator
    {
    public:
        virtual void First()=0;
        virtual void Next()=0;
        virtual Item* CurrentItem()=0;
        virtual bool IsDone()=0;
        virtual ~Iterator();
    };

    template<class Item>
    class ConcreteAggregate;

    template<class Item>
    class ConcreteIterator : public Iterator <Item>
    {
    public:
        ConcreteIterator(ConcreteAggregate<Item>* pAggr);
        virtual void First();
        virtual void Next();
        virtual Item* CurrentItem();
        virtual bool IsDone();

    private:
        ConcreteAggregate<Item>* m_pAggr;
        int m_nCur;

    };

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

    template<class Item>
    class ConcreteAggregate:public Aggregate<Item>
    {
    public:
        ConcreteAggregate();
        virtual Iterator<Item>* CreateIterator();
        Item& operator[](int index);
        int GetLen();

    private:
        vector<Item >m_Data;
    };

    //////////////////////////////////////////////////////////////////////////
    void IteratorPattern_Test();
}

#endif


实现
#include "IteratorPattern.h"
#include <iostream>
using namespace std;

#define SAFE_DELETE(p) if (p) { delete p; p = NULL; }

namespace IteratorPattern
{
    //////////////////////////////////////////////////////////////////////////
    template<class Item>
    Iterator<Item>::~Iterator(){}

    template<class Item>
    ConcreteIterator<Item>::ConcreteIterator(ConcreteAggregate<Item>*a)
        : m_pAggr(a)
        , m_nCur(0)
    {}

    template<class Item>
    void ConcreteIterator<Item>::First()
    {
        m_nCur=0;
    }

    template<class Item>
    void ConcreteIterator<Item>::Next()
    {
        if(m_nCur<m_pAggr->GetLen())
            m_nCur++;
    }

    template<class Item>
    Item* ConcreteIterator<Item>::CurrentItem()
    {
        if(m_nCur<m_pAggr->GetLen())
            return &(*m_pAggr)[m_nCur];
        else
            return NULL;
    }

    template<class Item>
    bool ConcreteIterator<Item>::IsDone()
    {
        return (m_nCur>=m_pAggr->GetLen());
    }

    //////////////////////////////////////////////////////////////////////////
    template<class Item>
    Aggregate<Item>::~Aggregate(){}

    template<class Item>
    ConcreteAggregate<Item>::ConcreteAggregate()
    {
        m_Data.push_back(1);
        m_Data.push_back(2);
        m_Data.push_back(3);
    }
    
    template<class Item>
    Iterator<Item>* ConcreteAggregate<Item>::CreateIterator()
    {
        return new ConcreteIterator<Item>(this);
    }

    template<class Item>
    Item& ConcreteAggregate<Item>::operator[](int index)
    {
        return m_Data[index];
    }

    template<class Item>
    int ConcreteAggregate<Item>::GetLen()
    {
        return m_Data.size();
    }

    //////////////////////////////////////////////////////////////////////////
    void IteratorPattern_Test()
    {
        Aggregate<int> * m_pAggr =new ConcreteAggregate<int>();
        Iterator<int> *it=m_pAggr->CreateIterator();

        for(it->First();!it->IsDone();it->Next())
        {
            cout<<*(it->CurrentItem())<<endl;
        }

        delete it;
        delete m_pAggr;
    }
}


1
2
3
分享到:
评论

相关推荐

    c++设计模式-行为型模式-迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它在C++以及其他面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户以一种统一的方式遍历聚合对象中的元素,而无需暴露聚合对象的内部结构。这增加了代码...

    迭代器模式Demo

    迭代器模式是一种设计模式,它在软件工程中扮演着重要的角色,特别是在处理集合或容器类对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合...理解并熟练运用迭代器模式对于提升代码质量和可维护性具有重要意义。

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

    迭代器模式是软件设计模式中的一种行为模式,它在C#等面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户遍历一个聚合对象(如数组、集合或列表)的所有元素,而无需了解底层的实现细节。下面将详细...

    设计模式的迭代器模式的例子

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以方便...

    设计模式之迭代器模式(新)

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在“设计模式之迭代器模式(新)”中,我们将深入探讨这种模式的核心概念、实现方式以及它在实际编程中的应用...

    迭代器模式代码示例

    迭代器模式是一种设计模式,属于行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以...

    迭代器模式demo

    迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象编程语言中,迭代器模式被广泛应用于集合类库,如ArrayList、LinkedList等。这个"迭代器模式demo...

    【Java设计模式】(1)迭代器模式Iterator

    迭代器模式(Iterator Pattern)是Java设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    3. **迭代器模式**:迭代器模式是行为型设计模式,它允许我们遍历集合对象的元素而无需暴露其底层表示。迭代器模式提供了一种方法顺序访问聚合对象中的元素,而无需暴露其底层结构。在Java中,迭代器模式广泛应用于...

    65丨迭代器模式(上):相比直接遍历集合数据,使用迭代器有哪些优势?1

    在实际开发中,虽然我们通常直接使用编程语言提供的迭代器类,但理解迭代器模式的工作原理有助于更好地利用这些工具,特别是在处理复杂数据结构或需要自定义遍历行为时。通过将遍历逻辑从集合类中分离,迭代器模式...

    设计模式--迭代器模式java例子

    迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如ArrayList、LinkedList等。本示例将深入探讨如何在Java中实现和使用迭代器...

    C#设计模式迭代器示例

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在C#中,迭代器模式的应用非常广泛,尤其是在处理集合类库时。本教程将深入讲解如何在C#中实现迭代器模式。 ...

    java体系结构之迭代器模式.rar

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如List、Set和Map接口,使得程序员可以方便地遍历集合中的元素。 ...

    Android迭代器模式demo

    迭代器模式是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象的元素而无需暴露其底层表示的方法。在Android开发中,迭代器模式的应用可以帮助我们更好地管理和遍历集合数据,尤其在处理复杂的逻辑或者需要...

    迭代器模式.rar之java设计模式

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式是通过接口和实现类来实现的,让我们深入探讨一下这个模式。 首先,我们要理解迭代器模式的...

    设计模式C++学习之迭代器模式(Iterator)

    迭代器模式是软件设计模式中的行为模式之一,它在C++编程中有着广泛的应用。这个模式提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。通过迭代器,用户可以遍历集合中的所有元素,而无需知道如何...

    java设计模式之迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如List、Set和Map接口,提供了遍历元素的方法。让我们深入探讨这个...

Global site tag (gtag.js) - Google Analytics