2017-03-13 4 views
2

sThread()라는 메서드가있는 클래스가 있습니다. mClass의 sThread() 메소드의 코드를 리팩터링하고 싶습니다. 자바의 정적 컨텍스트에서이 방법을 사용할 수 있습니까?

class SClass { 
    private Thread sThread; 

    public void sSubThread() { 

      initalize_sThread(); 

      //some code 

      if (this.sThread != null) { 
       return; 
      } 
    } 
} 

그래서 (아래) 정적 방법으로 이름 SubscritpionThread 하나 개 더 유틸리티 클래스를 만들어 같은 변경했습니다.

class mClass { 
    // some code 

    public void sThread() { 
     SThread.sThreadStart();  
    } 
} 

class SThread { 

    private static Thread sThread; 

    private static void initalize_sThread() { 
     // some code 
    } 

    public static void sThreadStart() { 
     // some code 
     // changed this to classname 
     if (SThread.sThread != null) { 
      return; 
     } 
    } 
} 

올바른 방법입니까, 어떤 제안을 해주시겠습니까?

+2

스택 오버플로에 오신 것을 환영합니다! [둘러보기] (http://stackoverflow.com/tour)를 방문하고 둘러보고 [도움말 센터] (http://stackoverflow.com/help)를 읽으십시오. 특히 [어떻게 묻는가?] 좋은 질문입니까?] (http://stackoverflow.com/help/how-to-ask) 및 [여기에 대해 내가 들려 줄 주제는 무엇입니까?] (http://stackoverflow.com/help/on-topic). - * "올바른 방법일까요?"* 아마, 아마도 그렇지 않을 수 있습니다. 그러나 그것은 당신이 성취하고자하는 목표에 달려 있습니다. –

+3

너무 광범위합니다. 리팩토링 제안은 다양한 이유로 코드가 "덜"좋아지게 만듭니다. 그런 의미에서 : 예를 들어, SOLID OOP 디자인 규칙에 대해 읽으십시오. 전체 책자는 적절한 디자인에 대해 작성되었습니다 .... 대신 * 연구하여주십시오. *이 변경으로 코드가 향상됩니다. – GhostCat

+0

이제는 내 작업이 코드를 리팩토링하는 것입니다. "this.subscriptionThread"코드를 변경하고 싶습니다. 제안 사항을 알려주십시오. – mrs

답변

3

정적 필드 (최종 필드가 아닌 한)는 눈살을 찌푸므로 가볍게 사용하십시오.

클래스 mClass에는 인스턴스 필드와 메소드가 있었지만 스레드의 일부 작업을 유틸리티 클래스로 분류하기로 결정했습니다.

유틸리티 클래스는 정적 필드에 의존하지 않아야합니다. 글로벌 변수가 필요한 경량 솔루션은 싱글 톤을 만들고 전역 변수를 호스팅하는 것입니다.

싱글 톤을 사용하면 너무 작지만 (임의의 정적 필드보다 작음) 다음 단계는 guice, weld, spring (사용자 이름)과 같은 종속성 주입 프레임 워크입니다.

결론은 데이터 범위를 유지하려고 시도하는 것입니다. 글로벌 필드가 필요한 경우 범위의 응용 프로그램 범위으로 생각하십시오.