接上回:
http://www.csdn.net/Develop/read_article.asp?id=11801
使用builder模式,來多點進攻,
可以避免abstract factory的
進球方式已經定死的缺點,
因爲builder生產的產品差異很大,
以至於無需定義一個抽象的父類,
再就是很多人會把builder和observer
弄混,以爲subject就是director,
observer就是builder,其實builder
模式中的director是虛擬的,並
沒有該類,實際上只是在builder中
有統一的可以看作是director的接口。
用builder模式有以下幾個好處:
1.你可以任意改變進球的方式和過程,
只用新生成一個builder(打某種戰術的一個隊員)。
2.將進球的過程和其他組織過程分開。
3.可以對進球過程進行更精細的控制。
4.builder的抽象父類並不將生成方法
聲明成純虛擬函數,而是定義成空方法,
可以讓教練(client)只定義其需要的方法。
代碼如下:
class 射門機器{
public:
virtual void 頭球射門(){}
virtual void 腳射門(){}
virtual void 其他射門(){}
virtual 進球* 得到進球(){return 0;}
protected:
射門機器();
};
class 隊員:public 射門機器{
public:
隊員();
virtual void 頭球射門();
virtual void 腳射門();
virtual void 其他射門();
virtual 進球* 得到進球();
private:
/*...自己的特性和進攻方式*/
};