java - 这是好的设计吗 : using a pure abstract class to facilitate the use of factory method

标签 java design-patterns factory-pattern

我有一个由几个 JPanel 组成的 GUI。我想使用工厂方法来实例化 JPanel。这是一个 UML 图,显示了我想要做什么:

enter image description here

简单的说,工厂方法需要使用JPanelSimulatorSubscriber中的方法,但是如果createPanel()方法返回一个JPanelSimulatorFactory 将无法调用 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/

相关文章:

java - 我如何使用 spring 使用带参数的消息

java - 在 Java 中使用静态访问修饰符实现单例

java - 无需AOP框架即可动态添加方面的软件设计

java - 简单工厂和工厂方法模式的动机

c# - 具有异步表单工厂的简单注入(inject)器

.net - 关于依赖注入(inject)和工厂的疑惑

java - 在java中查找模式匹配单词的最快方法

java - 静态变量是否在两个线程之间共享?

Java解压zlib

asp.net-mvc - 使用 EntityFramework 和映射的 ViewModels 的 ASP.NET MVC 最佳实践