永久java对象

时间:2011-04-19 21:02:45

标签: java object permanent

我想知道(必须有一个简单的解决方案),如果有一种方法可以创建许多对象,并在其他类和对象中使用它们,而不必更新它们(在Java中)。一个例子:

A,B和C类使对象成为b和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. 

3 个答案:

答案 0 :(得分:3)

看看Singleton pattern 它只适用于您需要D类的单个实例,但您可以创建一个单例来存储其他对象的引用。希望这会有所帮助。

答案 1 :(得分: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对象。 addAB的{​​{1}}方法将实施C

答案 2 :(得分:-1)

根据您的描述,我认为您的意思是Immutable Objects