我想在C++(使用SDL)中做一個小而簡單的GUI。我正在嘗試使用Composite模式以獲得靈活的解決方案。我需要一個訪問者來訪問我的組件嗎?
我有一個Widget類,有Component對象:例如,有一個PaintingComponent;如果我想繪製一個盒子,我將使用從PaintingComponent繼承的一個PaintingBoxComponent。
理想的Widget類看起來有點像:
Class Widget
{
private:
vector<Component*> myComponents;
public:
// A small number of methods able to communicate with the component
// without knowing their types
}
我的問題很簡單:什麼是我需要的時候啓動這個組件的最佳方式?
我首先在Widget類中使用了「顯示」功能。但我看到兩個問題:我正在丟失Widget中的「Compoonent」的純多態性,因爲我不得不將該部件的特定組件聲明爲PaintingComponent。我可以處理這個問題,因爲顯示Widget是合乎邏輯的。
2°)更麻煩的是,我需要在我的主程序和我的PaintingComponent之間傳遞信息。我可以將SDL_Surface *屏幕傳遞給PaintingComponent,並繪製它繪製的圖像,或者給我的組件提供需要接收它所繪製圖像的對象的引用(並且此對象將繪製圖像屏幕)。在這兩種情況下,Widget都必須處理數據,並且必須知道SDL_Surface *是什麼。我失去了鬆耦合,我不想那樣。
然後,我考慮使用「訪問者」模式,但我不習慣它,在我嘗試實現它之前,我想徵求您的意見。
在這種情況下,您將如何着手靈活而堅實的解決方案?提前致謝 !
謝謝,我已經設法按照您的描述進行操作。但是它改變了全球架構中的很多東西,起初有點令人費解,現在,我必須弄清楚如何在widget中使用visitor + widget + Widget!無論如何,你說服了我:最好能夠稍後改變圖形。再次。 – Raveline 2010-09-24 19:21:29