设计模式(十一):迭代器模式
2013-05-12 00:24
330 查看
定义:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
即不论对象内部的元素是以数组存放还是容器类型存放,都可以对外表现为迭代器形式。
即不论对象内部的元素是以数组存放还是容器类型存放,都可以对外表现为迭代器形式。
#include <iostream> #include <string> #include <assert.h> using namespace std; class MenuItem { public: MenuItem(){} MenuItem( string &name, string& des, bool ck, float pric ); ~MenuItem(){} string& getItem() { return itemName; } string& getDes() { return description; } bool getCanCook() { return canCook; } float getPrice() { return price; } private: string itemName; string description; bool canCook; float price; }; MenuItem::MenuItem( string &name, string& des, bool ck, float pric ) { itemName = name; description = des; canCook = ck; price = pric; } class Iterator_MenuItem { public: Iterator_MenuItem(){} ~Iterator_MenuItem(){} virtual bool hasNext() = 0; virtual MenuItem* next() = 0; /* data */ }; #define MAX_ITEM 20 class PancakeHouseMenu : public Iterator_MenuItem { public: PancakeHouseMenu(); ~PancakeHouseMenu(){} bool hasNext(); MenuItem* next(); private: void addItem( string &name, string& des, bool ck, float pric ); private: MenuItem* item[MAX_ITEM]; int count; int iter; }; PancakeHouseMenu::PancakeHouseMenu() { count = 0; iter = 0; addItem( ( string )"K&B's Breakfast.", ( string )"Panckes with scrambled eggs.", true, 2.99f ); addItem( ( string )"Regular Pancake Breakfast.", ( string )"Panckes made with fresh blueberries.", false, 3.99f ); addItem( ( string )"Waffles.", ( string )"Waffles, with your choice of blueberries or strawberries.", true, 1.99f ); } void PancakeHouseMenu::addItem( string &name, string& des, bool ck, float pric ) { MenuItem *pMenuItem = new MenuItem( name, des, ck, pric ); item[count++] = pMenuItem; } bool PancakeHouseMenu::hasNext() { return iter < count ? true : false; } MenuItem* PancakeHouseMenu::next() { return item[iter++]; } void TestIteratorPattern() { PancakeHouseMenu pa; MenuItem* pTemp = NULL; assert( true == pa.hasNext() ); pTemp = pa.next(); assert( ( string )"K&B's Breakfast." == pTemp->getItem() ); assert( ( string )"Panckes with scrambled eggs." == pTemp->getDes() ); assert( true == pTemp->getCanCook() ); assert( 2.99f == pTemp->getPrice() ); assert( true == pa.hasNext() ); pTemp = pa.next(); assert( ( string )"Regular Pancake Breakfast." == pTemp->getItem() ); assert( ( string )"Panckes made with fresh blueberries." == pTemp->getDes() ); assert( false == pTemp->getCanCook() ); assert( 3.99f == pTemp->getPrice() ); assert( true == pa.hasNext() ); pTemp = pa.next(); assert( ( string )"Waffles." == pTemp->getItem() ); assert( ( string )"Waffles, with your choice of blueberries or strawberries." == pTemp->getDes() ); assert( true == pTemp->getCanCook() ); assert( 1.99f == pTemp->getPrice() ); } int main() { TestIteratorPattern(); return 0; }
相关文章推荐
- 步步为营 .NET 设计模式学习笔记 十一、Iterator(迭代器模式)
- 步步为营 .NET 设计模式学习笔记 十一、Iterator(迭代器模式)
- java设计模式(十一)---迭代器模式
- Java设计模式菜鸟系列(十一)迭代器模式建模与实现
- 步步为营 .NET 设计模式学习笔记 十一、Iterator(迭代器模式)
- [设计模式](十一):观察者模式|迭代器模式|责任链模式|命令模式(四种类间行为模式)
- 设计模式之迭代器模式
- Python设计模式(十一)【原型模式】
- [设计模式] 16 迭代器模式 Iterator Pattern
- PHP设计模式系列(十一):状态模式
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 小话设计模式(十一)享元模式
- 设计模式中的迭代器模式在Cocoa Touch框架中的使用
- 设计模式之迭代器模式
- c++/qt设计模式-迭代器模式
- 深入浅出Java设计模式之迭代器模式
- 设计模式之迭代器模式
- 【设计模式】迭代器模式
- JAVA设计模式(4)迭代器模式Iterator
- 【设计模式】16.迭代器模式