我想我理解你的意思,但我也認爲當你說but the methods can be added at another time?
你的意思是什麼方法在另一個時間增加。
菜單,你的情況,通常需要採取一些基本的東西照顧,如
- 顯示實際的菜單文本(姑且稱之爲標題);
- 顯示工具提示;
- 點擊時做點什麼。
- 子子菜單項。
要做到這一點,你可以使用其中一種或兩種東西的組合:
- 的strategy設計模式。
- 抽象類。
策略設計模式允許您指定一個行爲,然後將它傳遞給某個知道該行爲如何處理的類。簡而言之,您的行爲可能是點擊菜單項時發生的情況。所以基本上,你的菜單類將不是知道點擊後該怎麼做,但它會將知道該呼叫將被委派給誰。這種方法可以讓你有一個Menu
類和它可以訪問的幾種行爲。
使用抽象類與使用設計模式類似,但是,最終會爲您想要的每個不同菜單創建一個新的具體類。
因此,我認爲最好的結果將介於兩者之間。
例如,你可以創建你Menu
父類爲abstract
,包含屬性如Title
,Tooltip
,等等。然後,您可以添加一個方法叫做onActionPerformed
這需要一些對象,處理該菜單項被點擊時,會發生什麼。最後,你可以創建抽象方法,如onBeforeActionPerformed
和onAfterActionPerformed
,這實質上是攔截器,它可以讓你在事件處理之前和之後執行邏輯。
然後,您可以擴展Menu
類的東西,如NonInterceptibleMenu
和喜歡來處理不同的情況。
我真的不完全理解你在說什麼,但只是'「一每個菜單的類(馬虎)或包含所有菜單的信息的類(不是馬虎)「實際上,在不同的類中進行分離在可能的情況下更好(只要它不影響含義)。看看[SRP原則](https://en.wikipedia.org/wiki/Single_responsibility_principle),我所說的話可能會更有意義。 – acdcjunior
「爲每個菜單(馬虎)或包含所有菜單的信息的類(不是馬虎)。如果您正在嘗試練習可重用代碼,我想知道如果您在一個課程中擁有所有內容,代碼的可重用性如何?我會說把東西分成小的可管理和可測試的類。 –
可悲的是我沒有代碼(仍然計劃我將如何處理這個任務),我知道它很難理解。 @acdcjunior通常我會同意你的看法,但是當涉及到菜單時,每個菜單選項都負責程序中的不同事情,或者至少負責調用程序中的不同方法。 – user3593486