这是一个很好的设计:使用纯抽象类来方便工厂方法的使用

时间:2011-05-15 09:28:04

标签: java design-patterns factory-pattern

我有几个JPanels的GUI组合。我想使用工厂方法来实例化JPanels。这是一个显示我想要做的UML图:

enter image description here

简单地说,工厂方法需要使用JPanelSimulatorSubscriber中的方法,但如果createPanel()方法返回JPanelSimulatorFactory将不会能够调用setSimulator(Simulator)方法。相反,如果它返回SimulatorSubscriber,它将无法将面板添加到它正在制作的gui中。

我的第一个想法是使用演员........我不需要详细说明..

其次,我想做我在图中绘制的内容。

这是好的/普遍的做法,还有其他选择吗?也许我对工厂方法的使用也是关闭的。

2 个答案:

答案 0 :(得分:1)

我会清楚地分开模型和视图。

因此,工厂不能同时像模拟器和像SimulatorDisplay这样的UI元素创建“业务/模型元素”。所以我会用两个工厂。一个用于业务元素,一个用于UI元素。

我会避免使用继承来解决所有可能的问题。因此不再使SimulatorDisplay继承自JPanel。我会在SimulatorDisplay中使用一个JPanel字段,并在其中创建一个带有getPanel()方法的'HasPanel'接口。

我不会直接向订阅者提供完整的模拟器,但使用真正的侦听器机制,只提供模拟器的公共状态而不是模拟器本身。

一般情况下,不要滥用Java中的Abstracts类和继承(可能来自接口)。你真的有限,java不支持多重继承。但即使它有,大部分时间,这都不是那么有用。

答案 1 :(得分:0)

看起来太复杂而不常见。我认为这是相当遥远的,但这只是我的观点。

如果你能写一篇关于你在这里试图解决的问题的简洁陈述,我可能会帮助我们两个人,除了通用的“使用工厂安装JPanels”之外。我知道工厂是什么,我知道什么是Swing UI,但是你遇到的困难是什么让你认为你需要一个设计模式?或者你为了自己的缘故注射了一个?