假设我有一个模拟ATM机器的GUI Java项目,我有以下类:
- RegisterWindow
- LoginWindow
- MainAccountOptionsWindow
等,其中所有类都围绕面板/窗口而不是正常的OO设计。有人告诉我这是一个特定的设计模式,也许是以E开头的东西,我只是不记得他们现在说的话!有人知道吗?以这种方式设计东西一般都不好吗?
感谢
答案 0 :(得分:5)
这取决于事件如何在窗口之间传播。
MVC的优点在于有很多不同类型的MVC,简单地说“MVC”并不是很有意义:在谈论MVC和Java时,很多人实际上都是指Sun的“模型2”MVC,但它并非总是如此,远非如此。
您的案例可能是HMVC / PAC的变体,但我无法确定,因为您只粘贴了与该视图相关的名称:HVMC是由程序员独立发现的,他们不知道年龄较大的“PAC”技术。 PAC是HMVC的一个更严格的子集,因为在PAC中,视图不能直接在模型中注册回调(每个通知必须通过控制器,在HVMC中,在某些情况下可以绕过控制器)。
200KLOC代码库,它处于PAC无处不在(因此是HMVC的更严格的子集)。
你必须知道,如果你确实使用任何MVC变体,它不是“糟糕的设计”,因为它运作得很好,但肯定不是“OO”。在真正的OO设计中,对象知道如何绘制自己,根据定义,MVC将视图与对象分离,这根本不是OO。这实际上是面向对象的反论。 Googling可以找到关于该主题的精彩文章。 (简而言之:解耦可能是一件非常好的事情,但脱钩并不意味着“OOness”)。
除此之外,“根本不是OO”通常不是问题,因为99%的Java程序不是OO:它们是使用可以习惯做OO,但通常不是。
顺便说一句,如果你在维基百科上查看MVC实现的语言列表,你会发现其中很多实际上不是OO语言(甚至不是混合OO语言)。
答案 1 :(得分:1)
在这种情况下有很多种可能性:
有关详细信息,请参阅此article。
答案 2 :(得分:0)
看起来你正在使用好的旧MVC模式(模型/视图/控制器),其中数据计算和数据呈现是分开的。 这些视图似乎是Swing窗口的事实并不重要 - 它可能是JSP或Excel提取......
答案 3 :(得分:0)
它可能是Model View Controller实施的一部分。
其他相关模式
答案 4 :(得分:0)
您可能需要考虑查看Observer pattern,只是想一想
答案 5 :(得分:0)
模型视图控制器。