我有几个JPanels的GUI组合。我想使用工厂方法来实例化JPanels。这是一个显示我想要做的UML图:
简单地说,工厂方法需要使用JPanel
和SimulatorSubscriber
中的方法,但如果createPanel()
方法返回JPanel
,SimulatorFactory
将不会能够调用setSimulator(Simulator)
方法。相反,如果它返回SimulatorSubscriber
,它将无法将面板添加到它正在制作的gui中。
我的第一个想法是使用演员........我不需要详细说明..
其次,我想做我在图中绘制的内容。
这是好的/普遍的做法,还有其他选择吗?也许我对工厂方法的使用也是关闭的。
答案 0 :(得分:1)
我会清楚地分开模型和视图。
因此,工厂不能同时像模拟器和像SimulatorDisplay这样的UI元素创建“业务/模型元素”。所以我会用两个工厂。一个用于业务元素,一个用于UI元素。
我会避免使用继承来解决所有可能的问题。因此不再使SimulatorDisplay继承自JPanel。我会在SimulatorDisplay中使用一个JPanel字段,并在其中创建一个带有getPanel()方法的'HasPanel'接口。
我不会直接向订阅者提供完整的模拟器,但使用真正的侦听器机制,只提供模拟器的公共状态而不是模拟器本身。
一般情况下,不要滥用Java中的Abstracts类和继承(可能来自接口)。你真的有限,java不支持多重继承。但即使它有,大部分时间,这都不是那么有用。
答案 1 :(得分:0)
看起来太复杂而不常见。我认为这是相当遥远的,但这只是我的观点。
如果你能写一篇关于你在这里试图解决的问题的简洁陈述,我可能会帮助我们两个人,除了通用的“使用工厂安装JPanels”之外。我知道工厂是什么,我知道什么是Swing UI,但是你遇到的困难是什么让你认为你需要一个设计模式?或者你为了自己的缘故注射了一个?