设计模式之 迭代器(Iterator)----对象行为型模式
来源:互联网 发布:霍元甲 大力士 知乎 编辑:程序博客网 时间:2024/04/24 18:29
//设计模式之 迭代器(Iterator)----对象行为型模式 ( 学习笔记)
1.意图
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
2.别名: 游标(Cursor)
3.适用性
*访问一个聚合对象的内容而无需暴露它的内部表示。
*支持对聚合对象的多种遍历。
*为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。
4.结构
5.参与者
*迭代器(Iterator)
---迭代器定义访问和遍历元素的接口。
*具体迭代器(ConcreteIterator)
---具体迭代器实现迭代器的接口。
---对该聚合遍历时跟踪当前位置。
*聚合(Aggregate)
--聚合定义创建相应迭代器对象的接口。
*具体聚合(ConcreteAggregate)
---具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
6.协作
ConcreteIterator跟踪聚合中的当前对象,并能够计算出待遍历的后继对象。
7.代码示例:
const int DEFAULT_LIST_CAPACITY = 100;
template <class Item> class Iterator;
template <class Item> //列表类模板
class List {
public:
List(long size = DEFAULT_LIST_CAPACITY);
Iterator<Item>* CreateIterator() const;
long Count() const;
Item& Get(long index) const;
// ...
};
template <class Item> //迭代器
class Iterator {
public:
virtual void First() = 0;
virtual void Next() = 0;
virtual bool IsDone() const = 0; //判断是否遍历完
virtual Item CurrentItem() const = 0;
protected:
Iterator();
};
template <class Item>
class ListIterator : public Iterator<Item>//具体迭代器
{
public:
ListIterator(const List<Item>* aList);
virtual void First();
virtual void Next();
virtual bool IsDone() const;
virtual Item CurrentItem() const;
private:
const List<Item>* _list;
long _current;
};
template <class Item>
ListIterator<Item>::ListIterator (
const List<Item>* aList
) : _list(aList), _current(0) {
}
template <class Item>
void ListIterator<Item>::First () {
_current = 0;
}
template <class Item>
void ListIterator<Item>::Next () {
_current++;
}
template <class Item>
bool ListIterator<Item>::IsDone () const {
return _current >= _list->Count();
}
//class IteratorOutOfBounds;
#define throw //
template <class Item>
Item ListIterator<Item>::CurrentItem () const {
if (IsDone()) {
throw IteratorOutOfBounds;
}
return _list->Get(_current);
}
template <class Item> //倒序遍历迭代器
class ReverseListIterator : public Iterator<Item> {
public:
ReverseListIterator(const List<Item>* aList);
virtual void First();
virtual void Next();
virtual bool IsDone() const;
virtual Item CurrentItem() const;
};
/***********************************************************************
*
*以下是一个雇员List的应用,实现打印雇员的信息
*
*
*************************************************************************/
class Employee {
public:
void Print();
};
List<Employee*>* employees; //雇员列表类
// ...
ListIterator<Employee*> forward(employees);
ReverseListIterator<Employee*> backward(employees);
void PrintEmployees (Iterator<Employee*>& i)
{
for (i.First(); !i.IsDone(); i.Next())
{
i.CurrentItem()->Print();
}
}
//以下两句实现按前后遍历顺序打印所有雇员信息
PrintEmployees(forward);
PrintEmployees(backward);
8.一点猜想
以前用过mfc的ODBC编写过数据库应用程序,回过头来想想,其中的主要的两个类CDatabase和CRecordSet 我觉得就是此模式中的应用。CRecordSet是一个迭代器。(一点猜想:忘高手指点)
- 设计模式之 迭代器(Iterator)----对象行为型模式
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- Iterator迭代器设计模式学习(对象行为型)
- 【设计模式】行为模式之迭代器Iterator
- [设计模式笔记]三. 行为型模式--18. Iterator模式(迭代器)对象行为型模式(一)
- C#面向对象设计模式纵横谈 学习笔记18 Iterator迭代器模式(行为型模式)
- 设计模式(行为型)之迭代器模式(Iterator Pattern)
- Iterator 迭代器模式 --对象行为型模式
- [设计模式-行为型]迭代器模式(Iterator)
- 迭代器模式(Iterator)(对象行为型模式)
- 设计模式(十四)迭代器模式(Iterator)-行为型
- 设计模式--迭代器模式Iterator(行为型)
- 设计模式-行为型- 迭代器模式(Iterator)
- 【设计模式攻略】行为型模式之Iterator模式
- 行为型模式之迭代器模式(Iterator)
- 正确使用String类的几点注意
- MS-4011Exploit漏洞攻击的解决方法
- 如何恢复丢失的MS文档?
- 使用回车代替Tab键
- 川大的荷花池
- 设计模式之 迭代器(Iterator)----对象行为型模式
- 一个大学毕业生回顾大学四年,对未来一片迷茫。
- 采用显示列控制DataGrid的checkbox两次
- 知識結構
- 全面了解Windows系统鲜为人知的宝藏
- 目前最好的JSP分页技术
- 终于创建了自己的Blog
- 顶天立地的神话
- Container