2013-01-09 100 views
1

我正在開發一個項目,並遇到一個問題,我不知道在類之間共享更新數據的最佳方式。目前我這樣做的方式是讓我的類的靜態實例在其中,並讓所有其他類更改實例而不是原始類。在java中的類之間共享更新的數據的最佳方式

public class A{ 
    public static volatile instance; 
    public B b = new B(); 
    public C c = new C(); 
    public D d = new D(); 
    public A(){ 
    this.instance = this; 
    b.changeData(); 
    } 
} 

public class B{ 
    public void changeData(){ 
    A.instance.d.changeSomethingInD(); 
    } 
} 

現在,D要其變量所做的所有修改可以用B訪問和C.是否有更好的方法來做到這一點?

編輯1:我有的問題是有更新的變量可以訪問所有其他類。這正是我在做之前:

public class MainClass extends JavaPlugin{ 
    private RegionLoader rLoader; 
    private ClassesLoader cLoader; 
    private MessageHandler mHandler; 
    private PlayerDates pDates; 

    public MainClass(){ 

     dirMaker(); 

     mHandler = new MessageHandler(this); 
     pDates = new PlayerDates(this); 
     cLoader = new ClassesLoader(this); 
     rLoader = new RegionLoader(this); 

    } 
//getters and setters 
} 

但問題是,如果RegionLoader內的變化本身somithing,該ClassesLoader不會有更新的變量,將與舊的工作,或者將它?

+0

您能詳細介紹一下您的使用案例嗎?有很多方法,你目前的方法是最糟糕的方法之一。 – Alistair

+1

請描述您正在嘗試解決的實際問題。到目前爲止,您只是在嘗試解決方案時遇到了問題。 –

+0

我編輯了這個問題,試圖更好地解釋。 – gkovalechyn

回答

2

爲什麼不把A傳遞給B的構造函數。這樣你就不需要使用靜態數據。

public class A{ 

     public B b; 
     public C c = new C(); 
     public D d = new D(); 

     public A(){ 
     b = new B(this); 
     b.changeData(); 
     } 
    } 

    public class B{ 
     private A a; 

     public B(A a){ 
     this.a = a; 
     } 
     public void changeData(){ 
     a.d.changeSomethingInD(); 
     } 
    } 

您也可以檢出觀察者模式。

相關問題