gpt4 book ai didi

java - 如何在 Java 中的不同类之间共享数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:38 24 4
gpt4 key购买 nike

在 Java 中的不同类之间共享数据的最佳方式是什么?我有一堆变量,不同的类以不同的方式在不同的文件中使用它们。让我尝试说明我的问题的简化版本:

这是我之前的代码:

public class Top_Level_Class(){
int x, y;

// gets user input which changes x, y;
public void main(){
int p, q, r, s;
// compute p, q, r, s
doA(p,q,r);
doB(q,r,s);
}

public void doA(int p, int q, int r){
// do something that requires x,y and p, q, r
}

public void doB(int q, int r, int s){
// does something else that requires x, y and q, r, s
}
}

现在看起来像这样:

public class Top_Level_Class(){
int x, y;
SomeClass1a a = new SomeClass1a();
SomeClass1a b = new SomeClass1b();
// gets user input which changes x, y;
public void main(){
int p, q, r, s;
// compute p, q, r, s
a.doA(p,q,r);
b.doB(q,r,s);
}

public class SomeClass1a() { // in its own separate file
public void doA(int p, int q, int r){
// do something that requires x,y and p, q, r
}
}


public class SomeClass1b() { // in its own separate file
public void doB(int q, int r, int s){
// does something else that requires x, y and q, r, s
}
}

那么无论如何,我是否应该每次都传递 x 和 y(其中 x,y 是存储在辅助类 func 中的变量)?

 a.set(x,y);
a.doA(p,q,r);

我的想法是有一个特殊的容器类,其中包含 x 和 y。顶级类将有一个容器类的实例,并使用 set 方法更改 x,y。

// in the top level class:
Container c = new Container(x,y);
a.setContainer(c);
b.setContainer(c);

我的助手类也会有一个容器实例,它会指向与顶层相同的实例。这样他们就可以访问与顶层相同的 x,y。

我想知道我是否应该

  • 使用容器类
  • 每次将 x,y 加载到子类中
  • ??一些更好的方法 ??

最佳答案

我猜你的问题的答案是称为单例的设计模式。它基本上允许您在系统中随时获取和利用类的相同(且唯一)实例。

这是它的实现(请原谅可能的语法错误,我没有编译它):

class Container{

//eventually provides setters and getters
public float x;
public float y;
//------------

private static Container instance = null;
private void Container(){

}
public static Container getInstance(){
if(instance==null){
instance = new Container();
}
return instance;
}
}

然后,如果您在代码的其他地方导入您可以编写的容器

Container.getInstance().x = 3;
temp = Container.getInstance().x;

并且您将影响系统中唯一容器实例的属性

然而,在许多情况下,使用依赖注入(inject)模式会更好,因为它可以减少不同组件之间的耦合。

关于java - 如何在 Java 中的不同类之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419810/

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