接上回:
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 _當前;
};