2013-10-21 1 views
-2

Java에서 사용하면 더 좋은 점이 있습니까? 단일 멤버 또는 모든 정적 멤버가 포함 된 클래스? 또는 그것은 중요하지 않습니까?모든 정적 멤버가 포함 된 싱글 톤 또는 클래스

예를 들어 X 클래스를 다른 클래스에서 액세스하려고하지만 X 클래스는이를 사용하는 모든 클래스에 대해 비슷한 값을 포함해야합니다.

+0

자바는 객체 지향 프로그래밍 언어입니다. –

+0

아니요, 귀하의 요구 사항이 전혀 명확하지 않습니다. 어떤 의미에서 더 좋습니까? 무슨 목적을 위해? –

+0

불완전한 요구 사항이있는 질문을합니다. 더 단순한 방법이나 정적 방법이 더 나은지를 결정하기 위해 더 많은 이론적 지식을 필요로합니다. 얻을 수있는 패턴 디자인을 연구하는 것이 좋습니다. 귀하의 질문에 대한 답변이 충분하지 않습니다. –

답변

0

모든 정적 클래스는 논리적으로 함께 그룹화되지만 그 사이에 상태 (필드)를 공유하지 않는 공유 유틸리티 메서드에 자주 사용됩니다. 당신은 그 역할을 다른 행동을 다른 개체를 할 수 있습니다

  1. : 경우

    싱글 톤은 더 좋다.

  2. 객체는 인터페이스를 구현해야합니다 (예 : 공유 ActionListener)

(이 말을하는 또 다른 방법 : 당신이 다형성이 필요한 경우, 단일 객체가 아닌 클래스 여야합니다)

1

들어 나 : Singleton is an anti-pattern과 강한 이유가있는 경우에만 사용해야합니다, 또한 공공 정적 변수를 홀로 수업 내 의견에 받아 들일 수없는,이 소리가 진짜 내게 지향 객체가 아닙니다. Dependency Injection을 사용할 수 있습니다. 이점은 테스트 가능성이며 싱글 톤 생성에 대한 이중 검사를 피할 수 있습니다 (enum을 사용하지 않는 경우). 객체에서 온 당신은 또한 볼이 방법으로

public class SharedObject{ 
// content 
} 


public class Worker{ 
private final SharedObject sharedObject; 
public Worker(SharedObject sharedObject){ 
this.sharedObject = sharedObject; 
} 
} 

, 당신은 easyly Mocktio를 사용하여 공유 객체를 조롱 할 수 있습니다

이 같을 것이다. 따라서 코드를 쉽게 테스트 할 수 있도록 구조화해야합니다. 반면에 더 모듈화 된 방향으로 나아갈 것입니다.

2

정적 클래스가 Singleton보다 의미있는 경우도 있습니다. java.lang.Math의 예를 볼 수 있습니다. 이것은 싱글 톤이 아닙니다. 그저 정적 인 방법을 우리에게 제공하고 있습니다.

클래스가 상태를 유지하지 않고 일부 메소드에 대한 전역 액세스 만 제공하는 경우 컴파일 타임 동안 정적 바인딩으로 인해 정적 메소드가 Singleton보다 빠르기 때문에 정적 클래스를 사용해야합니다. 정적 메서드를 재정의 할 수 없으므로 정적 메서드에서는 다형성을 사용할 수 없습니다.

개체의 상태를 유지하려면 정적 메서드 대신 싱글 톤으로 이동해야합니다. 전체 OO 기능이있는 클래스가 필요한 경우에는 정적 모드를 선택하고 정적 개체는 저장해야하는 경우에는 Singleton을 선택합니다. 정적 클래스를 사용하는 것보다 http://javarevisited.blogspot.com/2013/03/difference-between-singleton-pattern-vs-static-class-java.html#ixzz2iNE3rW4i

1

을 내가 FacesContext 같은 상태 형 클래스> versa- 부사장으로 단지 Math 또는 System 클래스와 같은 비 상태이며, 클래스 정적 메서드를 선호하고, 싱글 :

당신은 더 읽기 여기 에 대한 자세한 설명을 할 수 있습니다 .

0

정적 메소드를 사용하는 비유자가 가능클래스가 아닌 인스턴스 가능 클래스입니다. 예 :: 당신이 적용 범위와 비슷한 상태을 유지하려는 경우에만

public final class Constants { 

    private Constants() { 
     // non-public constructor 
    } 

    public static final Pattern ID_PATTERN = Pattern.compile("^\\d{4,10}$"); 

    public static final Locale DEFAULT_LOCALE = new Locale("en", "US"); 

    ... 

} 

사용 싱글. 그러나 클린 디자인을 원할 경우 두 클래스 여야합니다.

관련 문제