때로는 응용 프로그램의 수명주기 동안 한 번만 인스턴스화해야하는 클래스가 필요합니다. 단위 테스트가 문제가되기 때문에 싱글 톤을 만드는 것은 나쁘다. 하나는 내 응용 프로그램의 수명주기 동안 이러한 객체의 인스턴스가 있어야거의 싱글 톤을 구현하는 방법은 무엇입니까?
하지만 여전히 때문에 응용 프로그램이를 실행 중일 때, 지금까지 두 번 을 같은 개체를 인스턴스화하는 것은 오류 일 것이다.
따라서 내 응용 프로그램이 해당 수명주기 동안 두 번 인스턴스화 된 것을 발견하면 즉시 예외를 throw하고 싶습니다. 단위 테스트 동안 이러한 개체의 여러 인스턴스화를 허용하는 중.
나는 그것이 무리한 요구하지 생각 : 응용 프로그램의 한주기 동안 단 하나의 개체를 생성 할 필요가있는 경우는 예외를 던지는 할 수있는 올바른 것처럼 보인다.
는 여기에 내가 뭘하는지입니다 : 내가 단위 테스트 항상 실제 응용 프로그램이 실행되는 사실있을 때 App.isRealApp은() 항상 거짓을 반환하여야한다
/**
* The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
* "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
* document are to be interpreted as described in RFC 2119.
*
* You MUST NOT instantiate this class more than once during the application's
* lifecycle. If you try to do so, an exception SHALL be thrown.
*
* You SHOULD be able to instantiate this class more than once when unit
* testing.
*
*
*/
public class LifeCycle {
private static final AtomicInteger cnt = new AtomicInteger(0);
@NotNull
public static LifeCycle getNewLifeCycle() {
if (cnt.incrementAndGet() > 1 && App.isRealApp()) {
throw new IllegalStateException("Class is already instantiated");
}
return new LifeCycle();
}
}
. 내 질문은 간단하다 : 그것은 의미가 않고 어떻게이를 구현 해야하는 건가요?
+1, 나는 경량 프록시 아이디어를 좋아합니다! – NoozNooz42
그것은 저에게 효과적입니다. 그리고 나는 코드베이스를 그대로 유지할 수 있다는 것을 의미했습니다. –