全攻全守之visitor篇
時間:2024-10-20 來源: 作者: 我要糾錯
<p style=line-height: 150%>接上回:<p style=line-height: 150%><A >http://www.csdn***/develop/article/11/11283.shtm</A><p style=line-height: 150%>采用全攻全守的打法,使用visitor模式,
每個隊員是一個visitor,每個位置是一個
node,好處是每加一個新的隊員,就增加
一種新的進攻或防守方法,每個隊員集中
了他的優點和相關的打法,分離了其他打法
到其他隊員身上。但是位置已經定死,增加
新位置比較困難。通過全場的位置結構和隊
員特性(類層次)進行訪問。當某個隊員跑到
某個位置時,他的操作會作為累積狀態影響
其他隊員的操作。由于全攻全守要求每個位置
的隊員的能力都很強,所以往往會造成主力前鋒
必須要有當中后衛能力之類的混亂局面,也就是
node要給visitor提供訪問其內部狀態的公共操作,
破壞了封裝性:)
代碼如下:
class 隊員{
public:
virtual void 訪問前鋒位置(前鋒位置*);
virtual void 訪問后衛位置(后衛位置*);
//...訪問其它位置的方法
protected:
隊員();
};<p style=line-height: 150%>class 位置{
public:
virtual ~位置();
virtual void 接受(隊員&)=0;
protected:
位置();
};<p style=line-height: 150%>
標簽: