Java中逻辑与设计的分离

Java中逻辑与设计的分离,java,model-view-controller,Java,Model View Controller,如果我要制作一个单窗口Java程序,我会发现自己正在做如下的事情。注意,我倾向于做很多事情,比如iOS开发 +-------------------------------------------------------------------------------+ | | | ExampleJFrame.java

如果我要制作一个单窗口Java程序,我会发现自己正在做如下的事情。注意,我倾向于做很多事情,比如iOS开发

+-------------------------------------------------------------------------------+
|                                                                               |
|      ExampleJFrame.java              ExampleJPanel.java                       |
|              |                               |                                |
| ExampleJFrameController.java -> ExampleJPanelController.java -> Component(s)  |
|                                                                               |
+-------------------------------------------------------------------------------+
我喜欢iOS标准的方式,并愿意遵循它。这是我能得到的最接近的了。我的问题是,如果我正在用
JFrame
做一些简单的事情,比如添加
JPanel
,设置标题、位置、大小等,我应该(1)子类
JFrame
,我应该只使用
ExampleJFrame
,让对象自己做上面提到的事情,还是(2)我应该只使用
ExampleJFrameController
来创建一个新的
JFrame
并设置它的标题等等吗

编辑


对于第二个选项,如果我想要子类化
ExampleJFrameController
,则父对象将
JFrame
的可见性设置为
true
,然后子对象才能对其执行任何操作。因此,也许我忘了添加选项3(这在某种程度上被“图形”所暗示):同时具有
ExampleJFrame
ExampleJFrameController
ExampleJFrame将设置其自身的大小、位置和标题,
ExampleJFrameController
将设置其可见性。然后是一个问题:如果
ExampleJFrame
应该知道
ExampleJPanel
并且
ExampleJFrameController
应该知道
ExampleJPanelController
,我如何将
ExampleJPanelController
连接到它的
ExampleJPanel`?还是我遗漏了一些可以解决这个问题的细节?

我认为选项2最好,因为您可以更轻松地管理它。此外,您还可以创建一个新的控制器,而无需创建一个全新的JFrame。这将保留内存,并使程序运行更有效。

我认为选项2最好,因为您可以更轻松地管理它。此外,您还可以创建一个新的控制器,而无需创建一个全新的JFrame。这将保留内存,并使程序运行更有效。

我将使用第二个选项

将Java代码拆分到这样的程度可能看起来非常漂亮和整洁,但在设计Java对象时会变得太复杂。你最终会得到很多文件,这些文件都可以在3或4分钟内轻松完成


如果使用第一个选项,每次您想要创建一个新的
JFrame
,最终都会创建一个新的控制器。使用第二个选项,您只需在现有控制器类中添加一个新对象。

我将使用第二个选项

将Java代码拆分到这样的程度可能看起来非常漂亮和整洁,但在设计Java对象时会变得太复杂。你最终会得到很多文件,这些文件都可以在3或4分钟内轻松完成


如果使用第一个选项,每次您想要创建一个新的
JFrame
,最终都会创建一个新的控制器。使用第二个选项,您只需在现有控制器类中添加一个新对象。

基本上与Jon所说的相同:(比您快了几秒钟,但我意识到我从您的答案中漏掉了一些东西,谢谢。20秒前我的答案是“刚才”但是,他会更信任你的答案,基本上和乔恩说的一样:(比你快了几秒钟,但我意识到我从你的答案中漏掉了一些东西,谢谢。20秒前我的答案时,你的答案是“刚才”但是ev,他会更信任你的。在这种情况下,将
JFrame
子类化而不是在内部使用JFrame也是糟糕的OOP风格。基本上,人们扩展线程而不是实现Runnable也是同样的问题。如果你需要从
JPanel
实现中控制
JFrame
,那么你会暗示调用父类的对象并从那里开始。如果需要从另一个控制一个
JFrame
,则需要上面的另一个控制器类(至少要保持所需的结构)。在这种情况下,将
JFrame
子类化而不是在内部使用JFrame也是一种糟糕的OOP风格。基本上,人们扩展线程而不是实现Runnable也存在同样的问题。如果需要从
JPanel
实现控制
JFrame
,那么只需调用父类的对象即可如果您需要从另一个控制一个
JFrame
,那么您需要上面的另一个控制器类(至少要维护您想要的结构)。