2009-05-07 2 views
2

없이 : 자바 정적 변수를 제외했을 경우 더 나은 언어했을 생각 하는가 효과적으로 싱글로 싱글 톤을 대체? 당신은 언어를 포함하여 거기되었을 수 있습니다 무엇 의욕에 정교한 수 : Definition here.자바 싱글 단순히 interrest 중

당신이 그렇게 생각한다면?

답변

7

같은 문서는 다음과 같은 문장이 있습니다

반 허용 싱글 톤의 다른 종류, 코드의 실행에 영향을주지 않는 것들이다를, 그들은 더 "쪽이 없습니다 효과 "

... 다음 기사 로깅에 대해 설명합니다. 또 다른 전형적인 예는 인쇄입니다. 그래서 이것은 "let 's - get-all-all-singletons"을 요구하는 기사 에서조차 Singletons에 대한 논의입니다.

저자가 제공하는 논쟁은 흥미 롭습니다. 그는 글로벌 상태를 갖는 것은 싱글 톤에 진짜 문제, 그리고 당신이 맑은에있는 프로그램과 싱글 사이의 단방향 통신이있는 한 상태.

정적 변수가 없으면 Java는 더 나쁜 언어가 될 것입니다. 이는 여러 사용 사례에서 필요한 기능이기 때문입니다. 내 말은, 당신이 정말로 원한다면 Java로 절차적인 방식으로 프로그래밍 할 수 있다는 것입니다. 그리고 그것은 악당이 아닙니다.

정적 변수와 싱글 톤의 남용은 반드시 우리가 그들을 제거해야한다는 것을 의미하지 않는다.

+0

그러면 남용을 없애는 가장 좋은 방법은 무엇입니까? 기업 내에서 리드가 많은 코드를 검토하고 싱글 톤이 아닌 이유에 대한 전도자가되어야한다고 말하십니까? 체크리스트의 또 다른 위험한 패턴과 비교했을 때 장기적으로 언어 제한이 더 쉽지는 않습니까? –

+0

유연성과 사용 편의성 사이에는 항상 절충안이 있습니다. 이 경우 정적 변수는 많은 경우에 매우 유용합니다. 그 (것)들을 제거하는 것은 언어를 불구가 될 것입니다. –

4

정적 변수가> 제외되었을 때 Java가 더 나은 언어라고 생각하십니까? 효과적으로 싱글 톤을 싱글 톤으로 대체 하시겠습니까?

아니, 때로는 정말 변수 또는 모든 객체에 공통적 인 상수를 갖고 싶어. 물론 정적은 필요악 없습니다.

언어에 포함 된 동기가 무엇인지 자세히 설명해 주시겠습니까? 정적

는 인스턴스 데이터없이 동작 모델, 데이터 오브젝트 또는 경계 불필요 방법 단축형이다.

2

독창적 인 싱글 톤과 정적 인 비 최종 함수에도 불구하고 다음과 같은 관용구를 사용하여 개체의 고유 ID를 생성하는 경우가 있습니다.

private static long idCounter; 
private synchronized static long getID() { return idCounter++; } 
private final long id = getID(); 

정적 인 비선호가있는 한 가지 인수입니다.

(또는, 톰 Hawtin의 지적대로 약간 더

private static final AtomicLong idCounter = new AtomicLong(); 
private final long id = idCounter.getAndIncrement(); 

) 나는 DFA에 동의

+3

AtomicInteger가 약간 더 좋을 것입니다. –

+0

@Tom Hawtin : 사실. AtomicLong을 사용하는 코드가 수정되었지만 Java 5 이상에서만 가능합니다. – Zarkonnen

0

. 때때로 정적은 의미가 있습니다.

또한 그것은 그것을 사용하지 않도록 선택할 수 있습니다 경멸의 언어 기능 사람입니다. 나는 통계와 싱글 톤을 유용하다고 본다. 당신이 인용

2

분명히 정적 상수가 유용합니다. Java에서 객체를 상수로 만들려면 변경 불가능한 유형을 정의하십시오. 현재 Java는 상수 유형이 부족합니다. 예를 들어 (비어 있지 않은) 배열을 가진 정적 필드를 보는 것은 매우 일반적이지만 (상상해 보면 상수로 처리됩니다.)

가변적 인 통계가 의미있는 경우는 거의 없습니다. 일부 캐시 및 외부 필드 추가 예. 유사하게 기존 객체로, 심지어 일정 String는 변경 가능한 필드가 있습니다.

그래서 완전히 정적의 내가 팬과 신어 그렇게 생각 SIAD을 가졌어요. 범용 언어에 대한 조금 어렵 치우는.

그러나 싱글 톤으로 옷을 입 었는지 여부와 관계없이 공통된 가변 스태틱은 분명히 갈 수있는 것입니다. 물론 API는 다를 것입니다. 내 일을 훨씬 쉽게해라. SecurityManager 메커니즘은 예를 들어 중복 될 수 있습니다.

1

나는 자바가 보다 예쁘다고 생각하지만, 싱글 톤 안티 패턴이 키워드를 제거함으로써 치유 될 것이라고 생각하지 않는다. 그것은 그 그것은 전체 시스템에서 해당 유형의 유일한 인스턴스 즉 것을, 안 자체에 대해 뭔가를 '알고'때문에

싱글 톤은 악이다. 이러한 종류의 정보가 클래스에 캡슐화되면 언제든지 싱글 톤을가집니다.

는 자바 이유에 관해서는, 나는 사물의 전체 범위처럼, 그것은 OO 순도과 실용성 사이의 타협이다, 그렇게 추측한다.

관련 문제