2

我想知道(必须有一个简单的解决方案)是否有办法制作多个对象,并在其他类和这些类中的对象中使用它们,而无需更新它们(在 Java 中)。一个例子:

A、B 和 C 类使对象 ab 和 c。然后我有 D 类,它生成对象 d。现在我想在 a 中使用 d,更改它,在 b 中使用 d,在那里更改它并在 c 中使用 d,并且仍然具有 a 和 b 的所有更改。我知道在函数中使用 d 作为参数并返回 d 是可能的,但这在我目前正在制作的程序中没有用。

有什么帮助吗?

好的,我的代码示例:

public class A {
   D d = new D ();
   A(D dObject){
     this.d = dObject;
   }
   public void add () {
     DObject.add(5);
   }
}

public class B {
   D d = new D ();
   B(D dObject){
     this.d = dObject;
   }
   public void add () {
     DObject.add(5);
   }
}

public class C {
   D d = new D ();
   C(D dObject){
     this.d = dObject;
   }
   public void add () {
     DObject.add(5);
   }
}
public class D {
   public int x=0;
   public void add (int y){
      x +=y;
   }
}

// in main class:
D d = new D();
A a = new A(d);
B b = new B(d);
C c = new C(d);

a.add();
b.add();
c.add();

// d.x should give 15 now. 
4

3 回答 3

3

看一下单例模式 它仅在您想要 D 类的单个实例时才有效,但您可以创建一个单例来存储其他对象的引用。希望这可以帮助。

于 2011-04-19T21:10:10.373 回答
1

我不确定我是否理解正确 -d.x如果您更正语法错误,您发布的代码完全符合您的说法(是 15)。

这是一个应该可以工作的版本:

public class A {
   D d;
   A(D dObject){
     this.d = dObject;
   }
   public void add () {
     d.add(5);
   }
}

public class B {
   D d;
   B(D dObject){
     this.d = dObject;
   }
   public void add () {
     d.add(5);
   }
}

public class C {
   D d;
   C(D dObject){
     this.d = dObject;
   }
   public void add () {
     d.add(5);
   }
}
public class D {
   public int x=0;
   public void add (int y){
      x +=y;
   }
}

// in main class:
D d = new D();
A a = new A(d);
B b = new B(d);
C c = new C(d);

a.add();
b.add();
c.add();

// d.x should give 15 now. 

如果您想d保持不变而不是改变(例如d.x == 0在最后),您可以执行以下操作之一:

  • 在 A、B、C 的构造函数中克隆参数dObject,因此每个都有自己的D对象。
  • 使其D不可变并让其add方法返回一个新D对象。,的add方法然后会有实现。ABCd = d.add(5);
于 2011-04-19T22:54:49.940 回答
-1

根据您的描述,我认为您的意思是不可变对象。

于 2011-04-19T21:05:35.183 回答