接上回:
http://www.csdn.net/develop/read_article.asp?id=11677
使用iterator模式,让每个队员做 iterator,每个位置做aggregate, 有如下几个好处: 1.每个位置支持不同的队员用不同方式遍历。 2.简化了每个位置的接口,使其kiss,不用具有遍历的接口。 3.在同一个位置支持多个队员同时遍历。 代码如下: template <class Item> class 位置{ public: 位置(long size=缺省_位置_容量); long 计数() const; Item& Get(long index) const; //... };
template <class Item> class 队员{ public: virtual void 回到初始位置()=0; virtual void 下一个位置()=0; virtual bool 是否到达() const=0; virtual Item 当前Item() const=0; protected: 队员(); };
template <class Item> class 左后卫:public 队员<Item>{ public: 左后卫(const 位置<Item>* 一个位置); virtual void 回到初始位置; virtual void 下一个位置(); virtual bool 是否到达() const; virtual Item 当前Item() const; private: const 位置<Item>* _位置; long _当前; };
|