2013-01-09 3 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 
} 

그러나 자체 내에서 somithing RegionLoader 변경되면 ClassesLoader 업데이트 된 변수가되지 않습니다 및 이전 내용과 함께 작동하는 경우 문제가, 또는 것 : 이것은 내가 전에 무엇을하고 있었는지입니까?

+0

사용 사례가 무엇인지 자세히 설명해 주실 수 있습니까? 방법이 많이 있습니다, 현재 하나가 최악입니다. – Alistair

+1

해결하려는 실제 문제를 기술하십시오. 지금까지 시도한 솔루션에 문제가 있습니다. –

+0

더 나은 설명을 위해 질문을 편집했습니다. – gkovalechyn

답변

2

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(); 
     } 
    } 

또한 관찰자 패턴을 체크 아웃 할 수 있습니다.

관련 문제