<p style=line-height: 150%>接上回:
<p style=line-height: 150%><a href="http://www.csdn.net/develop/read_article.asp?id=11677">http://www.csdn.net/develop/read_article.asp?id=11677</a>
<p style=line-height: 150%>使用iterator模式,让每个队员做
iterator,每个位置做aggregate,
有如下几个好处:
1.每个位置支持不同的队员用不同方式遍历。
2.简化了每个位置的接口,使其kiss,不用具有遍历的接口。
3.在同一个位置支持多个队员同时遍历。
代码如下:
template <class item>
class 位置{
public:
位置(long size=缺省_位置_容量);
long 计数() const;
item& get(long index) const;
//...
};
<p style=line-height: 150%>template <class item>
class 队员{
public:
virtual void 回到初始位置()=0;
virtual void 下一个位置()=0;
virtual bool 是否到达() const=0;
virtual item 当前item() const=0;
protected:
队员();
};
<p style=line-height: 150%>template <class item>
class 左后卫:public 队员<item>{
public:
左后卫(const 位置<item>* 一个位置);
virtual void 回到初始位置;
virtual void 下一个位置();
virtual bool 是否到达() const;
virtual item 当前item() const;
private:
const 位置<item>* _位置;
long _当前;
};
相关阅读:
全‘心’康复,全新旅程
足球战术之strategy篇
足球战术之flyweight篇
足球战术->多点进攻之Abstract Factory篇
足球战术->组合进攻之composite篇