2011-05-15 62 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,但是您遇到的困难是什么让您认为您需要一种设计模式?还是你为了自己的利益注入了一个?

相关问题