`

迭代器模式(Iterator)

 
阅读更多
迭代器模式:提供一种方法顺序访问一个聚合中的各个元素,而又不暴露其内部表示。

要点:
1.迭代器允许访问聚合的元素,而不需要暴露它的内部结构。
2.迭代器将遍历聚合的工作封装进一个对象中
3.当使用迭代器的时候,我们依赖聚合提供遍历
4.迭代器提供了一个通用的接口,让我们遍历聚合的项时,就可以使用多态机制
5.我们应该努力让一个类只分配一个责任
6.组合模式提供一个结构,可同时包容个别对象和组合对象
7.组合模式允许客户对个别对象以及组合对象一视同仁
8.组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点
9.在实现组合模式时,有许多设计上的折衷。要根据需要平衡透明性和安全性

设计原则:一个类应该只有一个引起变化的原因



Iterator.h
#ifndef ITERATOR_H
#define ITERATOR_H

#include <list>
#include <assert.h>
using namespace std;

template<typename T>
class Iterator{
public:
    virtual T next()=0;
    virtual bool hasNext()=0;
};

template<typename T>
class ArrayIterator:public Iterator<T>{
private:
    T* t;
    int mIndex;
    int mMaxSize;
public:
    ArrayIterator(T* arr,int size)
    {
        t = arr;
        mMaxSize = size;
        mIndex = 0;
    }
    T next(){
        T data =  t[mIndex];
        mIndex++;
        return data;
    }
    bool hasNext(){
        if(mIndex<mMaxSize)
            return true;
        return false;
    }
};

template<typename T>
class ListIterator:public Iterator<T>{
private:
    list<T>* mList;
    int mIndex;
    typename list<T>::iterator mIter;
public:
    ListIterator(list<T>* lst){
        mList = lst;
        mIndex = 0;
        mIter = mList->begin();
    }
    T next(){
        T data = *mIter;
        ++mIter;
        return data;
    }
    bool hasNext(){
        if(mIter!=mList->end()){
            return true;
        }
        return false;
    }
};
#endif // ITERATOR_H



ContainerClass.h
#ifndef CONTAINERCLASS_H
#define CONTAINERCLASS_H
#include "Iterator.h"

template<typename T>
class ContainerClass{
public:
    virtual Iterator<T>* createIterator()=0;
    virtual void addElement(T elem)=0;
};

template<typename T>
class ArrayClass:public ContainerClass<T>{
private:
    T* mArray;
    int mMaxSize;
    int mIndex;
public:
    ArrayClass(int sz){
        mArray = new T[sz];
        mMaxSize = sz;
        mIndex = 0;
    }
    ArrayIterator<T>* createIterator(){
        return new ArrayIterator<T>(mArray,mMaxSize);
    }
    void addElement(T elem){
        assert(mIndex<mMaxSize);
        mArray[mIndex] = elem;
        mIndex++;
    }
};

template<typename T>
class ListClass:public ContainerClass<T>{
private:
    list<T>* mList;
public:
    ListClass(){
        mList = new list<T>;
    }
    ListIterator<T>* createIterator(){
        return new ListIterator<T>(mList);
    }
    void addElement(T elem){
        mList->push_back(elem);
    }
};

#endif // CONTAINERCLASS_H



main.cpp
#include "ContainerClass.h"
#include <iostream>

int main()
{
    ArrayClass<int> arr(10);
    ListClass<double> lst;
    for(int i=0;i<10;i++){
        arr.addElement(i);
        lst.addElement(i+0.5);
    }
    ArrayIterator<int>* arrIter = arr.createIterator();
    while(arrIter->hasNext()){
        cout << arrIter->next() << " ";
    }
    cout << endl;
    ListIterator<double>* listIter = lst.createIterator();
    while(listIter->hasNext()){
        cout << listIter->next() << " ";
    }
    cout << endl;
}


0 1 2 3 4 5 6 7 8 9 
0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 
  • 大小: 45.5 KB
分享到:
评论

相关推荐

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

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

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

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

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

    例如,在Java中,`Iterable`接口和`Iterator`接口就是实现迭代器模式的关键。`Iterable`接口定义了获取迭代器的方法`iterator()`,而`Iterator`接口提供了`hasNext()`和`next()`方法,分别用于检查是否还有下一个...

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

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

    (行为型模式) Iterator 迭代器模式

    C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载

    23钟设计模式之迭代器模式模式

    在迭代器模式中,存在三个主要角色:迭代器(Iterator)、聚合对象(Aggregate)和客户端(Client)。迭代器负责遍历聚合对象中的元素,聚合对象提供了元素的集合,而客户端则使用迭代器来遍历聚合对象中的元素。 ...

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

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

    迭代器Iterator.txt

    迭代器模式是一种常用的设计模式,它允许我们以一种顺序访问集合对象的方式遍历其元素,而无需暴露该对象的内部表示。接下来,我们将详细讨论这一模式的关键概念、结构及其在Java集合框架中的具体实现。 ### 一、...

    迭代器模式(Iterator)C++实现

    迭代器模式是一种设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在C++中,迭代器模式通常通过定义一个接口,该接口允许访问和遍历聚合对象的元素,而无需暴露其内部结构。这种模式在...

    迭代器模式代码示例

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

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

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

    设计模式之迭代器模式

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式是通过接口实现的,这使得我们可以遍历任何实现了`Iterable`接口的对象,例如集合框架中的`...

    java迭代器模式实现正反向遍历

    在Java编程语言中,迭代器模式(Iterator Pattern)是一种常用的设计模式,用于顺序访问集合对象中的元素,而无需暴露其底层表示。这种模式提供了一种方法来访问一个聚合对象的元素,而无需暴露该对象的内部结构。在...

    迭代器模式Demo

    迭代器模式是一种设计模式,它在软件工程中扮演着重要的角色,特别是在处理集合或容器类对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,...

    设计模式-迭代器模式(讲解及其实现代码)

    在Java、C#等面向对象语言中,迭代器模式的应用非常广泛,例如Java中的`Iterable`接口和`Iterator`接口,C#中的`IEnumerable`接口和`IEnumerator`接口。这些接口为实现迭代器模式提供了标准的方式。 迭代器模式的...

    PHP设计模式之迭代器模式Iterator实例分析【对象行为型】

    迭代器模式是面向对象设计中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层结构。在PHP中,迭代器模式通过提供一个接口,使得客户端可以遍历任何类型的集合,如数组、关联数组或自定义的数据...

    Android迭代器模式demo

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

    IteratorPattern 迭代设计模式

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

Global site tag (gtag.js) - Google Analytics