Постоянные объекты Java - PullRequest
       15

Постоянные объекты Java

2 голосов
/ 20 апреля 2011

Мне было интересно (должно быть простое решение), есть ли способ создать несколько объектов и использовать их в других классах и объектах из этих классов, не обновляя их (в Java). Пример:

Классы A, B и C составляют объекты a b и c. Тогда у меня есть класс D, который делает объект d. Теперь я хочу использовать d в a, изменить его, использовать d в b, изменить его там и использовать d в c и при этом иметь все изменения из 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 ]

3 голосов
/ 20 апреля 2011

Взгляните на шаблон Singleton Это работает, только если вам нужен один экземпляр класса D, но вы можете создать синглтон для хранения ссылок на другие объекты. Надеюсь, это поможет.

1 голос
/ 20 апреля 2011

Я не уверен, правильно ли я понимаю - опубликованный вами код делает именно то, что вы говорите (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 в конце), вы можете сделать одно из следующих действий:

  • делает клоны параметра dObject в конструкторе A, B, C, поэтому у каждого есть свой D объект.
  • делает D неизменным и позволяет его методу add возвращать новый объект D. Метод add A, B, C будет иметь реализацию d = d.add(5);.
0 голосов
/ 20 апреля 2011

Я думаю, что вы имеете в виду Неизменяемые объекты на основе вашего описания.

...