我有一个由几个 JPanel 组成的 GUI。我想使用工厂方法来实例化 JPanel。这是一个 UML 图,显示了我想要做什么:
简单的说,工厂方法需要使用JPanel
和SimulatorSubscriber
中的方法,但是如果createPanel()
方法返回一个JPanel
、SimulatorFactory
将无法调用 setSimulator(Simulator)
方法。相反,如果它返回一个 SimulatorSubscriber
,它将无法将面板添加到它正在制作的 gui 中。
我的第一个想法是使用强制转换........我不需要详细说明..
其次,我想做我在图中画的东西。
这是好的/常见的做法吗?还有其他选择吗?也许我对工厂方法的使用也被关闭了。
最佳答案
我会清楚地将模型和 View 分开。
因此工厂不能同时创建像模拟器这样的“业务/模型元素”和像 SimulatorDisplay 这样的 UI 元素。所以我会使用两个工厂。一种用于业务元素,一种用于 UI 元素。
我会避免使用继承来解决所有可能的问题。所以不再让SimulatorDisplay继承自JPanel。我会在 SimulatorDisplay 中使用 JPanel 字段,并在其中创建一个带有 getPanel() 方法的“HasPanel”接口(interface)。
我不会直接向订阅者提供一个完整的模拟器,而是使用一个真正的监听器机制,它只提供模拟器的公共(public)状态而不是模拟器本身。
一般来说,不要滥用 Java 中的抽象类和继承(接口(interface)除外)。你真的很有限,java 不支持多重继承。但即使有,在大多数情况下,这也不是很有用。
关于java - 这是好的设计吗 : using a pure abstract class to facilitate the use of factory method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6007572/