博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《设计模式》学习笔记——迭代器模式
阅读量:4110 次
发布时间:2019-05-25

本文共 2074 字,大约阅读时间需要 6 分钟。

        迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。

IteratorPattern.h

#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() {};};

 

IteratorPattern.cpp

#include "IteratorPattern.h"

 

mainTest.cpp

#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/

你可能感兴趣的文章
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输出文件流ofstream用法详解
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>