Java - 最好直接访问其他对象组件还是通过方法?

时间:2011-04-24 09:23:39

标签: java oop

这是更多的理论问题。我和我的朋友写过简单的聊天。我们有几个类,但最重要的是Client(处理网络东西)和GUI(不言自明:))。

现在,我将消息写入JTextArea。我想问一下,从OOP理论来看,最好是发送给客户端对JTextArea的引用并直接向其附加文本,或者最好在GUI中创建函数并使其从客户端调用它?当然消息来自服务器。

我知道最有效的方法是第一种,但我相信它不是正确的OOP方式。我发现OOP的效率低于程序性,而不是因为它在抽象上更复杂,但因为许多OOP标准看起来似乎是无效的。谢谢。

4 个答案:

答案 0 :(得分:3)

您应该encapsulate GUI的功能。客户不应该对其内部工作有任何了解。相反,您应该提供一个语义上有意义的公共方法来描述它将执行的任务 - 在这种情况下更新显示。

理想情况下,您应该有一个代表您的GUI操作的界面 - 这将使客户端与GUI分离,并且意味着您可以有多个UI实现界面,而客户端不关心它正在使用哪个UI。

答案 1 :(得分:0)

桌面应用程序通常由业务层表示层组成。 GUI属于表示层。我假设客户属于业务层。

业务层不应该对表示层有任何了解。

答案 2 :(得分:0)

在这种情况下,客户端可以引入一个接口。类似的东西:


interface MessageListener {
   void handleNewMessage();
}

然后,我们可以有一个观察者模式。客户端调用已注册的MessageListener。 GUI将MessageListener和注册表实现到客户端。

答案 3 :(得分:0)

关于这个:

  

我知道最有效的方法是   首先,但我相信它不是   适当的OOP方式。我发现了OOP   效率低于程序性,不是   因为它更复杂   抽象,但因为许多OOP   标准似乎没有用。   感谢。

对于你将要编写的所有代码的大约99%,效率是完全无关紧要的,因为它不会经常运行以注意任何低效率。这当然就是这种情况:GUI事件处理代码是关于性能最高的非关键代码,因为用户甚至不能注意到小于1/100秒的延迟,而且在现代硬件上是永恒的。

此外,对于你所写过的所有代码的100%,完整而正确的问题不仅仅是效率问题。没有人关心你的代码如何有效地处理错误的事情。当可维护,清洁,分离时,生成正确完整的代码会更容易。这正是OO及其惯例尝试(并且通常做到)变得更容易。