本文共 2074 字,大约阅读时间需要 6 分钟。
迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。
#pragma once#include#include // 模拟对象typedef int Object;#define SIZE 5// 自定义迭代器接口,抽象层class MyIterator{public: virtual void First(void) = 0; // 指向第一个元素 virtual void Next(void) = 0; // 指向下一个元素 virtual bool IsDone(void) = 0; // 是否已经结束了 virtual Object CurrentItem(void) = 0; // 获取当前项private:protected:};// 抽象容器,接口class Aggregate{public: // 创建迭代器 virtual MyIterator* CreateIterator() = 0; // 获取容器大小 virtual int getSize(void) = 0; // 获取元素 virtual Object getItem(int index) = 0;private:protected:};// 具体的迭代器class ContreteIterator:public MyIterator{public: ContreteIterator(Aggregate* aggregate,int index=0):m_aggregate(aggregate),m_currentIndex(index){} virtual void First(void)// 指向第一个元素 { m_currentIndex = 0; // 当前游标置0 } virtual void Next(void)// 指向下一个元素 { if (m_currentIndex < m_aggregate->getSize()) { m_currentIndex++; } } virtual bool IsDone(void)// 是否已经结束了 { return (m_currentIndex == m_aggregate->getSize()); } virtual Object CurrentItem(void)// 获取当前项 { return m_aggregate->getItem(m_currentIndex); }private: int m_currentIndex; // 当前位置 Aggregate* m_aggregate; // 指向容器的指针protected:};// 具体的容器class ContreteAggregate:public Aggregate{public: ContreteAggregate() { for (int i = 0; i < SIZE; i++) object[i] = i; } // 创建迭代器 virtual MyIterator* CreateIterator() { return new ContreteIterator(this); } // 获取容器大小 virtual int getSize(void) { return SIZE; } // 获取元素 virtual Object getItem(int index) { return object[index]; }private: Object object[SIZE]; // 对应的底层数据protected:};class IteratorPattern{public: IteratorPattern() {}; ~IteratorPattern() {};};
#include "IteratorPattern.h"
#include#include #include "IteratorPattern.h" int main(void){ // 创建一个集合 ContreteAggregate* contreteAggregate = new ContreteAggregate; // 创建一个迭代器 MyIterator* myIterator= contreteAggregate->CreateIterator(); for (;!(myIterator->IsDone()); myIterator->Next()) { std::cout<< myIterator->CurrentItem()<<" "<
转载地址:http://semsi.baihongyu.com/