2011-04-19 81 views
2

如果有一種方法可以創建多個對象,並將它們用於這些類的其他類和對象,而不必更新它們(在Java中),我想知道(必須有一個簡單的解決方案) )。舉例:永久性java對象

A,B和C類使物體成爲a 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

D讓d ?? ..你需要更好地改變你的問題。 – 2011-04-19 21:06:54

+0

這是我認爲我讀過的最複雜的問題。請嘗試將此改寫爲有意義的東西... toooo很多事情要跟蹤...... – 2011-04-19 21:08:51

+0

此外,這將需要3個不同的「d」或某種版本引擎的實例... – 2011-04-19 21:10:00

回答

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方法A,B,C然後將具有實現d = d.add(5);
+0

謝謝,這不是我想到的那種代碼,但我肯定會試試這個。 – Hidde 2011-04-21 04:53:05

-1

我想你根據你的描述意味着Immutable Objects

+0

他沒有提及,變化b,c變化b ...即使這個問題是神祕的,對象是可變的是顯而易見的。 – 2011-04-19 21:11:42

3

看看Singleton pattern 它只適用於你想要D類的單個實例,但你可以創建一個單例來存儲其他對象的引用。希望這可以幫助。