欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

设计模式复习-迭代器模式

发布时间:2025/6/17 asp.net 13 豆豆
生活随笔 收集整理的这篇文章主要介绍了 设计模式复习-迭代器模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Iterator.H #pragma once #include <list> #include <windows.h> using namespace std;/* 设计模式-迭代器模式(Iterator) 提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象内部表示。 (现在好多语言都已经内置实现了这个功能了,所以实际用途不大, 但是建议写一下,实现过程价值远远大于使用价值。) */class Iterator{//迭代器抽象类public:virtual void * First() = 0;virtual void * Next() = 0;virtual BOOL IsDone() = 0;virtual void * CurrentItem() = 0; };class CAggregate {//聚集抽象类public:virtual Iterator * CreateIterator() = 0;virtual void Insert(void * const pNode) = 0;virtual void Remove(void * const pNode) = 0; };class CConcreteAggregate :public CAggregate {//具体聚集类public:list<void*>mpItems;CConcreteAggregate();void Clear();Iterator * CreateIterator();void Insert(void * const pNode);void Remove(void * const pNode); };class CConcreteIterator : public Iterator {//具体的迭代器类private:CConcreteAggregate *mpAggregate = NULL;int mnCurrent = 0; public:CConcreteIterator(CConcreteAggregate * pAggregate);void * First();void * Next();BOOL IsDone();void * CurrentItem(); };Iterator.CPP #include "stdafx.h" #include "Iterator.h"CConcreteAggregate::CConcreteAggregate() {mpItems.clear(); }void CConcreteAggregate::Clear() {for each(auto i in mpItems) {delete i;} }Iterator * CConcreteAggregate::CreateIterator() {return new CConcreteIterator(this); }void CConcreteAggregate::Insert(void * const pNode) {mpItems.push_back(pNode); } void CConcreteAggregate::Remove(void * const pNode) {mpItems.remove(pNode); }CConcreteIterator::CConcreteIterator(CConcreteAggregate * pAggregate) {mpAggregate = pAggregate;mnCurrent = 0; }void * CConcreteIterator::First() {return mpAggregate->mpItems.size() == 0 ? NULL :*(mpAggregate->mpItems.begin()); } void * CConcreteIterator::Next() {if (IsDone()) return NULL;int nSubscript = 0;mnCurrent++;for each(auto i in mpAggregate->mpItems) {if (nSubscript++ == mnCurrent + 1) {return i;}} } BOOL CConcreteIterator::IsDone() {return mnCurrent >= mpAggregate->mpItems.size(); } void * CConcreteIterator::CurrentItem() {int nSubscript = 0;for each(auto i in mpAggregate->mpItems) {if (nSubscript++ == mnCurrent) {return i;}}return NULL; }#pragma once #include "stdafx.h" #include "Iterator.h" #include<string> #include<iostream> using namespace std;int main() {CConcreteAggregate *pA = new CConcreteAggregate();pA->Insert(new string("node-1"));pA->Insert(new string("node-2"));string * pStr = new string("node-3");pA->Insert(pStr);Iterator *pIteratorA = new CConcreteIterator(pA);while (!pIteratorA->IsDone()) {cout << *((string*)pIteratorA->CurrentItem()) << endl;pIteratorA->Next();}pA->Remove(pStr);Iterator *pIteratorB = pA->CreateIterator();while (!pIteratorB->IsDone()) {cout << *((string*)pIteratorB->CurrentItem()) << endl;pIteratorB->Next();}pA->Clear();delete pIteratorA;delete pIteratorB;delete pA;delete pStr;getchar();return 0; }

总结

以上是生活随笔为你收集整理的设计模式复习-迭代器模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。