Java中逻辑与设计的分离
如果我要制作一个单窗口Java程序,我会发现自己正在做如下的事情。注意,我倾向于做很多事情,比如iOS开发Java中逻辑与设计的分离,java,model-view-controller,Java,Model View Controller,如果我要制作一个单窗口Java程序,我会发现自己正在做如下的事情。注意,我倾向于做很多事情,比如iOS开发 +-------------------------------------------------------------------------------+ | | | ExampleJFrame.java
+-------------------------------------------------------------------------------+
| |
| 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
,那么您需要上面的另一个控制器类(至少要维护您想要的结构)。