2012-04-09 3 views
0

내 기본 클래스 중 하나에서 생성되는 싱글 톤 객체가 있습니다.소프트웨어 디자인, 가독성 문제, 정적 대 인스턴스 메소드

public class SomeClass 
{ 
    private static final MySingletonClass _singletonObject = new MySingletonClass() 

    protected final getSingletonObject() 
    { 
     return _singleonObject; 
    } 
} 

정적이거나 그렇지 않은 방법으로 결정해야합니다. 내 디자인 마음은 객체가 정적이기 때문에 메소드가 정적이어야한다고 말하지만,이 "객체"의 사용법은 파생 된 클래스 멤버 내에서 액세스 할 때만 의미가 있기 때문에 메소드는 인스턴스가되어야한다고 내 "사용자"마음에서 말합니다.

사용법은 시각적으로 유일한 차이점은 IDE에서 정적 및 인스턴스 메소드를 처리하는 방식이며 내 질문에는 의미가 없습니다.

답변

0

이렇게하는 더 좋은 방법은 다음과 같습니다. 싱글은 클래스 자체보다는 그것을 위해 그 일을 다른 클래스에 의해 적용 할 수

MySingletonClass.getInstance().doStuff() 

수정 의견에 따라 (당신이 봄 할 경우에 스프링 같은 DI 컨테이너를 사용하지 않는 당신을 위해 것을 관리)

아래와 같이 선언하고 모든 하위 클래스가 동일한 인스턴스를 공유합니다.

public class SomeClass 
{ 
    public static final MySingletonClass INSTANCE = new MySingletonClass() 
} 

다음과 같이 액세스합니다. 즉, 하위 클래스의 수식어로 수퍼 클래스 이름을 사용합니다. 정적 인스턴스가 상속되지 않는다는 것을 기억하십시오 ...

public class SomeDerivedClass extends SomeClass 
{ 
    public void someMethod() 
    { 
    SomeClass.INSTANCE.doStuff() 
    } 
} 
+0

SomeClass의 하위 클래스에 대해서만 모든 클래스에 대해 인스턴스를 공개하고 싶지 않기 때문에 문제가 해결되지 않습니다. – DVD

+0

그러면 정적이되어서는 안됩니다. –

+0

하지만 여러 개의 파생 클래스 인스턴스가 공유하는 객체를 원합니다. xD – DVD

0

싱글 톤 클래스의 생성자는 개인용입니다. 따라서 Singleton 클래스에서 직접 개체를 만들 수는 없습니다. 질문을 만족하는 아래의 코드를 참조하십시오

public class MySingletonClass { 

    //static variable for the singleton instance in tracked here 
    private static MySingletonClass instance = null; 

    private MySingletonClass() { 

    } 

    public static synchronized MySingletonClass getInstance() { 
     if(null == instance) { 
      instance = new MySingletonClass(); 
     } 

     return instance; 
    } 
} 

public class SomeClass { 
    //Already static instance is instance is tracked in MySingletonClass, no need of declaring a static variable here 
    //private static final MySingletonClass _singletonObject = new MySingletonClass() 

    protected final MySingletonClass getSingletonObject() 
    { 
     //This will return the static instance of the MySingletonClass class. 
     return MySingletonClass.getInstance(); 
    } 
} 

나를 좀 더 구체적으로 답변해야하는지 여부를 알려 주시기 바랍니다.

관련 문제