나는 싱글 톤 클래스 집합을 가지고 있으며, 상용구 코드를 피하고 싶다. 여기에 내가 지금 무엇을 가지고 :상속을 가진 Java 싱글 톤
public class Mammal {
protected Mammal() {}
}
public class Cat extends Mammal {
static protected Cat instance = null;
static public Cat getInstance() {
if (null == instance) {
instance = new Cat();
}
return instance;
}
private Cat() {
// something cat-specific
}
}
이 작동하고 잘못된 것은 내가 getInstance()
방법을 복제해야합니다 Mammal
의 많은 서브 클래스를 가지고 있다는 것을 제외하고는, 없다. 가능한 경우 다음과 같은 것을 선호합니다.
public class Mammal {
protected Mammal() {}
static protected Mammal instance = null;
static public Mammal getInstance() {
if (null == instance) {
instance = new Mammal();
}
return instance;
}
}
public class Cat extends Mammal {
private Cat() {
// something cat-specific
}
}
어떻게하면됩니까?
귀하의 싱글 톤의 getInstance() 메소드가 제대로 구현되지 않습니다 - 당신이 할 수있는 다중 스레드 환경에서 최종적으로 여러 개의 인스턴스가 생성됩니다! – Liv
질문에 대한 답변이 아니지만 귀하의 싱글 톤 패턴은 스레드로부터 안전하지 않습니다. [Java Concurrency in Practice] (http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601)에 예제가 있습니다. – Bruno
여기서 싱글 톤이 가장 좋은 방법입니까? 싱글 톤은 실제 세계에서 단 하나의 인스턴스 만 존재하는 서비스 또는 다른 것들을 표현하는 데 가장 잘 사용됩니다. 코드가 실제로 고양이와 개를 사용하지 않는다고 가정하므로이 패턴이 응용 프로그램 도메인에 실제로 적합한 지 확인하십시오. 싱글 톤이 적절한 경우 Jim Garrison의 Spring 사용 솔루션을 사용하는 것이 좋습니다. 스프링 빈은 기본적으로 싱글 톤입니다. –