2012-07-01 2 views
0

여러 클래스 사이에 1 개의 인스턴스를 공유해야합니다. Connect 클래스에는 URL을 작성하고 데이터를 다운로드하는 메소드가 있으며, ui는 URL (날짜를 구성하는 날짜를 구성하는 데이터)을 가져 오는 인터페이스 (스윙 양식)입니다.여러 클래스를 통해 객체 공유

가장 좋은 방법은 무엇입니까?

생각했다

public class Global { 

public static Connect c; 
} 

2) 본체의 인스턴스()을 결정, 물체를 통과 : 그것은 세계에서 메이커

1).

public static void main(String[] args) throws IOException { 

      Connect c = new Connect(); // get url to download from 
      ui form = new ui(c);   // the form to get data from 
. 
. 
. 

더 합리적이라면 무엇이 있을까요?

감사합니다.

+0

답변은 정확한 시나리오에 따라 다르므로 좀 더 구체적으로 설명해야합니다. – biziclop

답변

2

일반적으로 선호되는 방법은 인스턴스를 필요한 클래스의 생성자로 전달하는 것입니다. 그렇게하면 누군가가 Global.c을 설정했는지, 언제 사용할 수 있는지를 추측 할 수 없습니다. 또한 각 클래스에 Connect 객체가 필요하다는 것을 명확하게 설명합니다. 또 다른 이점은 코드가 변경 되어도 UI 클래스가 더 이상 동일한 글로벌 Connect 인스턴스에 의존하지 않게하려면 더 이상이 글로벌 컨텍스트에서 마법 인스턴스를 가져 오는 모든 코드를 변경하지 않아도됩니다. 다른 대상에서.

"왜 전역 변수가 안좋은가"또는 "왜 싱글턴 접근자가 나쁜가"라는 라인을 따라 뭔가를 검색하면 내 설명보다 훨씬 자세한 내용을 얻을 수 있습니다. 그 (것)들을위한 용도가있다, 그러나 당신이 그 (것)들을 정면까지 피할 수있는 경우에 당신은 선의 아래 두통을 저장할지도 모른다. 모든 것과 마찬가지로 각각에 대한 절충안이 있습니다.

0

첫 번째 옵션은 매우 신중해야합니다. 여기에 많은 단점이 있습니다.

  • 객체 지향 프로그래밍 스타일이 아닙니다. 오히려 구식 C 코드처럼 냄새가납니다.
  • 많은 인스턴스를 지원해야한다면 어떻게 될까요?
  • 이제 인스턴스를 변경해야한다면 어떻게됩니까?
  • 이제 응용 프로그램이 멀티 스레드로 전환되면 어떻게됩니까?

이러한 점 중 일부는 최초의 솔루션 그냥 엉망 당신은 유지 보수 및 코드의 가독성의 측면에서 설명한 두 번째 솔루션에 유효하게 적용 할 수 있지만 ... 나받는 그래서

두 번째 것이 더 좋다.

희망이 있습니다.