gpt4 book ai didi

java - 将其传递给构造函数

转载 作者:行者123 更新时间:2023-12-02 07:43:48 26 4
gpt4 key购买 nike

在我的大多数 Java 应用程序中,我都有一个 Controller (逻辑)类和一个 GUI 类。我通常需要 Logic 类来调用 GUI 类的方法,反之亦然。现在,当 Logic 构建 GUI 时,我在构造函数中传递了对“this”的引用,这样 GUI 就可以调用 Logic 上的方法。这是一些示例代码。

public class Logic {
private int num = 2;
private final GUI gui;

public Logic(){
gui = new GUI(this);
}

public int getNum(){
return num;
}
}


public class GUI {
private final Logic logic;

public GUI(Logic logic){
this.logic = logic;
}

public void calledLater(){
int num = logic.getNum();
}
}

我的问题是:这是创建聚合关系的最佳 OO 方式,还是我搞砸了我的设计?

最佳答案

在您发布的设计中,您的用户界面和模型之间存在紧密耦合。如果构建大型/正式/严肃/长生命周期系统,这有点不受欢迎。有一个众所周知的构建 UI/模型架构的模式,称为 Model-View-Controller解决了这个问题。

您是否需要担心制作 MVC 风格的架构实际上取决于您的应用程序的上下文和您将来对它的期望。但是您应该仔细阅读 MVC 并了解它的存在。

顺便说一句,我在你的代码中看到一个 "code smell" :两个对象,A 和 B,每个对象都持有对彼此的引用。通常有一种比循环引用更理想的做事方式。例如,您可以通过让对象 A 持有对 B 的引用(甚至可能“拥有”它),并且 B 通过通知或观察者模式等将感兴趣的数据推送给 A 来避免这种情况。这避免了 B 不得不有关于 A 的任何特定信息,甚至必须知道它存在。瞧,您的设计中耦合度较低,因此您最终有更多的代码重用范围,以及一个更容易更改的不那么脆弱的系统。

Cocoa(和 Cocoa Touch)中一个重要的核心设计模式是委托(delegate)模式。这种模式涉及使用协议(protocol)(类似于 Java 等其他语言中的接口(interface))来解耦信息、事件等的生产者和消费者。

我建议阅读 this excellent reference来自 Apple,关于 Cocoa Touch 中的基本设计模式。

关于java - 将其传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com