[자바 디자인 모델] - 디자인 모델 의 단일 사례 모델 에 대해 논 합 니 다.
4840 단어 디자인 모드
public class SingleClass{
private static SingleClass instance = new SingleClass();
private SingleClass(){
}
public static SingleClass getInstance(){
return instance;
}
someOtherMethod ...
}
위의 코드 를 비교 해 보면 하나, 둘 을 볼 수 있 을 것 같다.이러한 구조 기 는 개인 적 으로 공공 구조 기 를 제공 하지 않 아서 다른 유형 에서 new SingleClass () 를 통과 하지 못 하도록 보장 합 니 다.대상 을 만들다.이런 종 류 는 자신의 대상 을 가지 고 있다.이러한 대상 을 조작 할 수 있 는 유일한 방법 은 정적 방법 인 getInstance 를 통 해 이 루어 집 니 다.그러면 이 종 류 는 어디서 사용 하 든 현재 클래스 의 대상 만 포함 하고 있다 는 것 을 보증 할 수 있다.이렇게 하면 통제 욕 이 강 한 사람들 이 원 하 는 것 을 크게 만족 시 켰 다. 유일한 것 만 있 을 수 있다.시원 하 다아직 기분 나 쁘 지 않 아!이전 클래스 의 대상 이 정적 으로 변 했 을 때 이 클래스 를 불 러 오 는 동시에 메모리 에 이러한 인 스 턴 스 가 존재 합 니 다.이렇게 하면 네가 사용 하 든 안 하 든 나 는 메모 리 를 차지 하고 시스템 자원 을 미리 소모 할 수 있다.인 스 턴 스 생 성 을 내 가 필요 로 할 때 뒤로 미 룰 수 있 습 니까?네, 보 세 요.
public class SingleClass{
private static SingleClass instance;
private SingleClass(){
}
public static SingleClass getInstance(){
if(instance == null){
instance = new SingleClass();
}
return instance;
}
}
이렇게 하면 요 구 를 만족 시 켰 습 니까?내 가 이 대상 을 필요 로 할 때 그것 을 만 들 고 있다.하지만 세심 한 동료 가 문 제 를 발견 했다.다 중 스 레 드 환경 에서 두 스 레 드 는 getInstance 방법 을 동시에 호출 합 니 다.호출 하기 전에 인 스 턴 스 가 비어 있 는 것 을 발견 하 는 동시에 스 레 드 2 도 이곳 에 실 행 했 습 니 다. 이것 은 스 레 드 가 초기 화 되 었 고 그 후에 스 레 드 2 가 다시 초기 화 되 었 습 니 다.변 수 를 두 번 초기 화 합 니 다.해결 방법: 스 레 드 잠 금!코드 다시 보기:
public static SingleClass getInstance(){
synchronized (SingleClass.class) {
if(instance == null){
instance = new SingleClass();
}
return instance;
}
}
이렇게 정적 getInstance 방법 을 바 꾸 면 좋 을까요?사실 별로 좋 지 않 아 요. 효율 이 너무 낮 아 요.나 는 단지 실례 화 할 때 임계 구역 에 자 물 쇠 를 채 워 야 할 지도 모 르 지만, 지금 은 네가 실례 화 되 었 든 안 되 었 든 두 라인 이 만나면 막 힐 것 이다.어떻게 하면 좋 을까요?마지막 으로 코드 를 올 려 보 세 요, 통 들:
public static SingleClass getInstance(){
if(instance == null){
synchronized (SingleClass.class) {
if(instance == null){
instance = new SingleClass();
}
}
}
return instance;
}
보 세 요. 이렇게 펜 레 대상 을 예화 한 후에 대상 의 인용 으로 돌아 갑 니 다.초기 화 전에 스 레 드 안전 문제 가 존재 하면 잠 금 판단 을 추가 하면 실례 화 를 보장 할 수 있 습 니 다!
두 번 의 코드 는 끊 임 없 는 진화 과정 에서 개선 되 었 다.매번 이전의 코드 에 대한 탐색, 최적화, 재 탐색, 재 최적화.클래스 로드 에서 직접 예화 하 는 것 은 '게으름뱅이 식' 입 니 다. 무작정 먼저 예화 해 드 리 겠 습 니 다.방법 을 통 해 대상 을 방문 하고 초기 화 하 는 것 은 '굶 주 린 사람 식' 이다.게 으 른 사람 은 자원 을 소모 하고, 굶 주 린 사람 은 안전 문제 가 있다.이 해 를 배 운 후에 이해득실 을 따 져 야 한다.적절하게 사용 하 다.상속 후 존재 하 는 문제점 도 후속 논평 구 에서 논의 할 수 있 으 니 댓 글 지적 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.