设计模式---迭代器模式
来源:互联网 发布:php sendmail 抄送 编辑:程序博客网 时间:2024/06/16 06:25
迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示
当你需要对聚集有多种方式遍历时,可以考虑用迭代器模式。
#include<vector>
#include<iostream>#include<list>
using namespace std;
class MenuItem
{
public:
MenuItem(){}
MenuItem(string name,string des,double pri)
{
this->name = name;
this->des = des;
this->pri = pri;
}
string getName()
{
return name;
}
string getDes()
{
return des;
}
double getPri()
{
return pri;
}
private:
string name;
string des;
double pri;
};
class MyIterator
{
public:
virtual bool hasNext(){}
virtual MenuItem next(){}
};
class ConcreteIterator:public MyIterator
{
private:
list<MenuItem>items;
list<MenuItem>::const_iterator iter;
public:
ConcreteIterator(list<MenuItem>item)
{
items = item;
iter = items.begin();
}
MenuItem next()
{
MenuItem menuItem = *iter;
++ iter;
return menuItem;
}
bool hasNext()
{
if(iter == items.end())
{
return false;
}
else
{
return true;
}
}
};
class Menu
{
public:
virtual MyIterator *createIterator(){}
};
class ConcreteMenu : public Menu
{
private:
list<MenuItem>items;
public:
ConcreteMenu()
{
addItem("kfs","good",10.2);
addItem("cc","bad",101.2);
}
void addItem(string name,string des,double pri)
{
MenuItem menu (name,des,pri);
items.push_back(menu);
}
MyIterator *createIterator()
{
return new ConcreteIterator(items);
}
};
class Waitress
{
private:
Menu *ConcreteMenu;
public:
Waitress(Menu *menu)
{
ConcreteMenu = menu;
}
void printMenu()
{
MyIterator *iter = ConcreteMenu->createIterator();
while(iter->hasNext())
{
MenuItem menu = iter->next();
cout<<"name="<<menu.getName();
cout<<"des="<<menu.getDes();
cout<<"pri="<<menu.getPri()<<endl;
}
}
};
int main()
{
Menu *menu = new ConcreteMenu();
Waitress wa(menu);
wa.printMenu();
}
阅读全文
0 0
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- 设计模式--迭代器模式
- 设计模式-迭代器模式
- SAP系统时间不一致检查.
- cut
- 理解什么是抽象
- 阿里巴巴java开发手册的建议 集合为什么不能 remove
- 【动态规划14】UVA10635 Prince and princess(LCS转LIS)
- 设计模式---迭代器模式
- 【面试题16】反转链表
- HTTP和HPPTS
- Maven创建一个Java项目
- 基于HTML5 自定义编辑器
- Android Unable to delete file/directory 错误
- ssm通讯录管理系统--3
- 我的Android说
- 【我的Android进阶之旅】Android 混淆文件资源分类整理