class?CItemMngBase

{
};
class?CItemMngS?:?CItemMngBase

{
};
class?CItemMngC?:?CItemMngBase

{
};令人不爽的問題是,基類提供的最小接口中,徹底實現(xiàn)了和網(wǎng)絡(luò)、圖形無關(guān)的邏輯功能,沒有任何表現(xiàn)的,純數(shù)據(jù)操作的。然后派生類將重載這些接口(虛函數(shù)),將基類的那套代碼copy過來,并在合適的地方添加合適的網(wǎng)絡(luò)代碼或者圖形代碼。
重復(fù)這樣的操作,引起的一個問題是,在基類中的固有代碼還有什么意義,因為每個派生類都需要在固有代碼中嵌入一些特殊的代碼;另外一點是,這么copy和修改,誰還能保證派生類有好好履行基類所固定的功能的本質(zhì)?
這個問題我當(dāng)前所知應(yīng)對方案有兩種,一種是:
void?CItemMngX::AddItem(?pItem?)

{
??CItemMngBase::AddItem(?pItem?);
??//?這里做派生類的特殊處理(發(fā)包、圖形)
??
?
?
}另一種方案作為這個方案的改進,是利用監(jiān)聽器模式:
void?CItemMngBase::AddItem(?pItem?)

{
??//?
?some?code
??OnAddItem(?pItem?);
??//?
?some?code
}
void?CItemMngX::OnAddItem(?pItem?)

{
??//?特殊處理,發(fā)包或者圖形
}我想要有效的解決這個問題應(yīng)該是依靠某個設(shè)計模式。
好了,這就是我目前掌握的笨拙方案,期待能在回復(fù)中看到有創(chuàng)意的設(shè)計。^_^


