2015-08-20 35 views
1

這可能看起來像一個奇怪的問題,但我試圖練習編寫可重用的代碼,或者至少試圖以正確的方式練習思考,如果你知道我的意思嗎?我有一項任務,涉及用幾個不同的菜單編寫文本界面。所以有兩種方法:(1)每個菜單的類(馬虎)或(2)包含所有菜單的信息的類(而不是馬虎)。Java,Class對象具有不同的方法?

現在我正在寫這個,感覺這可能是不好的做法,但有可能有一個類包含菜單的基本組件(標題,MenuOptions列表等),但方法可以在另一個時間添加?或者,如果這是不可能的/可取的,這將是通常的首選方式,這樣做,(a)單獨的菜單單獨的類,或(b)一個大的類,其中包含所有的代碼不同的菜單?

+1

我真的不完全理解你在說什麼,但只是'「一每個菜單的類(馬虎)或包含所有菜單的信息的類(不是馬虎)「實際上,在不同的類中進行分離在可能的情況下更好(只要它不影響含義)。看看[SRP原則](https://en.wikipedia.org/wiki/Single_responsibility_principle),我所說的話可能會更有意義。 – acdcjunior

+0

「爲每個菜單(馬虎)或包含所有菜單的信息的類(不是馬虎)。如果您正在嘗試練習可重用代碼,我想知道如果您在一個課程中擁有所有內容,代碼的可重用性如何?我會說把東西分成小的可管理和可測試的類。 –

+0

可悲的是我沒有代碼(仍然計劃我將如何處理這個任務),我知道它很難理解。 @acdcjunior通常我會同意你的看法,但是當涉及到菜單時,每個菜單選項都負責程序中的不同事情,或者至少負責調用程序中的不同方法。 – user3593486

回答

1

我想我理解你的意思,但我也認爲當你說but the methods can be added at another time?你的意思是什麼方法在另一個時間增加。

菜單,你的情況,通常需要採取一些基本的東西照顧,如

  • 顯示實際的菜單文本(姑且稱之爲標題);
  • 顯示工具提示;
  • 點擊時做點什麼。
  • 子子菜單項。

要做到這一點,你可以使用其中一種或兩種東西的組合:

  1. strategy設計模式。
  2. 抽象類。

策略設計模式允許您指定一個行爲,然後將它傳遞給某個知道該行爲如何處理的類。簡而言之,您的行爲可能是點擊菜單項時發生的情況。所以基本上,你的菜單類將不是知道點擊後該怎麼做,但它會知道該呼叫將被委派給誰。這種方法可以讓你有一個Menu類和它可以訪問的幾種行爲。

使用抽象類與使用設計模式類似,但是,最終會爲您想要的每個不同菜單創建一個新的具體類。

因此,我認爲最好的結果將介於兩者之間。

例如,你可以創建你Menu父類爲abstract,包含屬性如TitleTooltip,等等。然後,您可以添加一個方法叫做onActionPerformed這需要一些對象,處理該菜單項被點擊時,會發生什麼。最後,你可以創建抽象方法,如onBeforeActionPerformedonAfterActionPerformed,這實質上是攔截器,它可以讓你在事件處理之前和之後執行邏輯。

然後,您可以擴展Menu類的東西,如NonInterceptibleMenu和喜歡來處理不同的情況。

+0

謝謝,這正是我所問的。抽象類似乎是我正在尋找的東西,所以我需要更多地研究。此外,感謝您爲設計模式的資源。爲廣泛的研究收藏。 – user3593486

+0

@ user3593486:如果菜單項需要互相做的唯一不同的事情是單擊時發生的情況,設計模式將有所幫助(這是Swing所做的)。 – npinti

0

有可能有一個類包含菜單的基本組件(標題,MenuOptions列表等),但方法可以在另一個時間添加?

從基本的「編碼」的角度來看,你可以創建一個abstract class,你宣佈你的核心組件(確保它們不會在private範圍內聲明),然後寫一個第二類extend你的抽象類,其中你聲明你的方法。除非你打算讓多個類擴展你的抽象類,否則不需要創建這個分離。

您沒有提供足夠的整體項目範圍,所以我會保留我的答案。

1

可在具有與具有不同實例的類的不同會造成混淆。例如,你可以有一個菜單類,但是這個類有兩個不同的對象,每個菜單對應一個菜單,每個菜單都有自己的一組數據來描述菜單項以及它們做什麼,因爲每個菜單幾乎都以相同的方式工作,但是在不同的數據。或者,如果菜單的行爲不同,但具有一些共同點,您可能需要爲常用位定義一個類,然後創建子類,每個子類都有關於如何將這種菜單設置分開的詳細信息。

1

您可以爲菜單項和菜單本身(作爲菜單項的集合)設置一個通用類。這些類不包含任何有關點擊行爲的邏輯,但它們只包含通用部分,如UI,佈局,標題佔位符 - 常規配置。

您可以'稍後添加方法'。這可以通過代表或lambda函數來實現。在Java中,當你有按鈕並單擊監聽器(甚至菜單)時,你可能會遇到Swing中類似的配置,你可以看看JMenuBar,JMenu,JMenuItem類的用法,它們的接口可能對你很有用。

你可能會遇到當「添加方法」爲匿名類的例子很多,這是之前的lambda函數在Java中8抵達

相關問題