足球戰(zhàn)術(shù)之iterator篇
時(shí)間:2024-10-20 來源: 作者: 我要糾錯(cuò)
<p style=line-height: 150%>接上回:<p style=line-height: 150%><A >http://www.csdn***/develop/read_article.asp?id=11677</A><p style=line-height: 150%>使用iterator模式,讓每個(gè)隊(duì)員做
iterator,每個(gè)位置做aggregate,
有如下幾個(gè)好處:
1.每個(gè)位置支持不同的隊(duì)員用不同方式遍歷。
2.簡化了每個(gè)位置的接口,使其kiss,不用具有遍歷的接口。
3.在同一個(gè)位置支持多個(gè)隊(duì)員同時(shí)遍歷。
代碼如下:
template <class Item>
class 位置{
public:
位置(long size=缺省_位置_容量);
long 計(jì)數(shù)() const;
Item& Get(long index) const;
//...
};<p style=line-height: 150%>template <class Item>
class 隊(duì)員{
public:
virtual void 回到初始位置()=0;
virtual void 下一個(gè)位置()=0;
virtual bool 是否到達(dá)() const=0;
virtual Item 當(dāng)前Item() const=0;
protected:
隊(duì)員();
};<p style=line-height: 150%>template <class Item>
class 左后衛(wèi):public 隊(duì)員<Item>{
public:
左后衛(wèi)(const 位置<Item>* 一個(gè)位置);
virtual void 回到初始位置;
virtual void 下一個(gè)位置();
virtual bool 是否到達(dá)() const;
virtual Item 當(dāng)前Item() const;
private:
const 位置<Item>* _位置;
long _當(dāng)前;
};
標(biāo)簽: