2011-05-15 43 views
3

我有一個GUI組件和幾個JPanel。我想使用工廠方法來實例化JPanel。這裏UML圖顯示了我想做的事:這是一個很好的設計:使用一個純抽象類來方便使用工廠方法

enter image description here

簡單地說,工廠方法需要使用方法從JPanelSimulatorSubscriber,但如果createPanel()方法返回一個JPanelSimulatorFactory不會能打電話方法setSimulator(Simulator)。換句話說,如果它返回一個SimulatorSubscriber,它將無法將面板添加到正在製作的GUI中。

我的第一個想法是使用石膏........我不需要詳細..

其次,我想到了就去做什麼,我在圖中畫了。

這是很好的/常見的做法,是否有替代品?也許我對工廠方法的使用也是關閉的。

回答

1

我會清楚地分開模型和視圖。

因此,工廠不能同時創建「業務/模型元素」,如模擬器和UI元素,如SimulatorDisplay。所以我會用兩個工廠。一個用於商業元素,一個用於UI元素。

我會避免使用繼承來解決每一個可能的問題。因此不再讓SimulatorDisplay從JPanel繼承。我將在SimulatorDisplay中使用JPanel字段,並在其中創建一個帶有getPanel()方法的「HasPanel」接口。

我不會直接給訂閱者提供一個完整的模擬器,而是使用真實的偵聽器機制,只提供模擬器的公共狀態而不是模擬器本身。

一般來說,不要濫用java中的Abstracts類和繼承(也許從接口中刪除)。你真的有限有java不支持多重繼承。但即使它在大多數情況下也不是那麼有用。

+0

這非常有幫助。我現在看到我如何合併模型和GUI組件的創建。分離這些將使它更清潔,並解決大部分問題。是的,當我有像getPanel()這樣的東西時,我很少需要從JPanel繼承。非常感謝。 – Kevin 2011-05-17 21:16:40

0

看起來太複雜而不常見。我認爲這是相當遙遠的,但這只是我的看法。

如果您可以在此處編寫關於您要解決的問題的簡潔聲明,那麼可以幫助我們兩個人,而不是通用的「使用工廠安裝JPanels」。我知道什麼是工廠,我知道什麼是Swing UI,但是您遇到的困難是什麼讓您認爲您需要一種設計模式?還是你爲了自己的利益注入了一個?

相關問題