Android 디자인 모드 의 단일 예 모드 Singleton
단일 모델 은 디자인 모델 에서 가장 간단 한 것 이지 만 디자인 모델 중의 각종 대상 간 의 추상 적 인 관계 가 없 기 때문에 어떤 사람들 은 이것 이 모델 이 아니 라 실현 기교 라 고 생각 하지 않 는 다. 단일 모델 은 글자 의 뜻 처럼 자신 만 의 실례 화 된 실례 를 제공한다.또한 전체적인 접근 점 을 제공 합 니 다. 이 몇 가지 요 구 를 달성 하려 면 세 가 지 를 만족 시 켜 야 합 니 다. 개인 구조 함수 (다른 사람 에 의 해 예화 되 는 것 을 방지), 정적 개인 자체 대상 (인 스 턴 스 제공), 정적 공유 getInstance 방법 (인 스 턴 스 대상 을 만 들 고 가 져 오 는 데 사용).
장단 점:
하나의 예 는 자신 이 하나의 인 스 턴 스 를 만 들 수 있 고 자주 만 들 거나 소각 할 필요 가 없 으 며 메모리 가 대상 의 접근 속 도 를 가속 화 할 수 있 습 니 다.
그러나 단일 사례 는 추상 적 인 층 과 핑계 가 없어 확장 하기 어렵다. 단일 사례 는 공장 방법 도 제공 하고 업무 방법 도 제공 하 며 어느 정도 단일 직책 원칙 에 위배 된다.
단 례 실현
단일 사례 의 실현 은 두 가지 주류 방식 이 있 는데 그것 이 바로 게으름뱅이 모델 과 굶 주 린 남자 모델 이다. 그들 은 사례 화 된 시기 와 효율 에 있어 각각 다르다.
1. 게으름뱅이 모드
/**
* Created by jesse on 15-6-28.
*/
public class Singleton {
private static Singleton instance;
private Singleton() {} // ,
public static Singleton getInstance(){
if (null == instance){
instance = new Singleton();
}
return instance;
}
}
게으름뱅이 모드 는 외부 대상 이 인 스 턴 스 를 받 을 때마다 이 인 스 턴 스 가 초기 화 되 었 는 지 여 부 를 판단 해 야 합 니 다. 이 점 은 굶 주 린 사람 모드 에 비해 효율 적 이지 만 공간 을 절약 할 수 있 습 니 다. 이 인 스 턴 스 를 언제 사용 해 야 초기 화 되 는 지, 사용 하지 못 하면..게으름뱅이 모드 에 서 는 이 대상 을 구성 하지 않 습 니 다. 공간 으로 시간 을 바 꾸 는 것 과 같 습 니 다. 즉, 로드 지연 기술 입 니 다. 그리고 주의해 야 할 것 은 반드시 사유 구조 가 있어 야 합 니 다. 그렇지 않 으 면 외부 대상 이 이 대상 을 예화 할 수 있 습 니 다. 그러면 어떤 사례 가 있 습 니까?
이 럴 때 많은 동료 들 이 말 하려 고 합 니 다. 게으름뱅이 가 한 번 에 문제 가 있 습 니 다. 스 레 드 안전 문제 가 있 습 니 다. 물론 이 방식 은 스 레 드 가 안전 하지 않 습 니 다. 두 스 레 드 A 와 B 가 동시에 인 스 턴 스 를 얻 으 려 고 할 때 인 스 턴 스 는 아직 초기 화 되 지 않 았 습 니 다. A 가 먼저 시간 영 화 를 받 아 인 스 턴 스 를 초기 화 했다 고 가정 합 니 다. 인 스 턴 스 가 초기 화 되 지 않 았 을 때 시간 영 화 는 B 에 게 양보 합이 때 인 스 턴 스 가 초기 화 되 지 않 았 기 때문에 인 스 턴 스 가 비어 있 기 때문에 B 는 인 스 턴 스 를 한 번 예화 합 니 다. 최종 결 과 는 인 스 턴 스 가 두 번 예화 되 었 습 니 다. 이것 은 심각 한 결 과 를 초래 할 수 있 습 니 다. 해결 방식 은 잠 금 (일부 성능 희생) 을 추가 하고 굶 주 린 사람 모드 를 사용 하 는 것 입 니 다.
getInstance 방법 에 자 물 쇠 를 추가 합 니 다. 이러한 잠 금 방식 은 스 레 드 안전 문 제 를 해결 할 수 있 습 니 다. 그러나 외부 대상 이 인 스 턴 스 를 가 져 올 때마다 스 레 드 잠 금 을 해 야 합 니 다. 그 다음 에 인 스 턴 스 가 예화 되 었 는 지 판단 해 야 합 니 다. 그러면 다 중 스 레 드 가 높 고 동시 다발 적 인 상황 에서 효율 적 인 손실 이 상당 합 니 다.
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance(){// getInstance
if (null == instance){
instance = new Singleton();
}
return instance;
}
}
그 후에 쌍 검 자물쇠 의 인 스 턴 스 방식 이 확대 되 었 다. 이런 방식 은 첫 번 째 예화 할 때 만 자 물 쇠 를 추가 하고 자 물 쇠 를 추가 하 는 전후 에 모두 예화 여 부 를 판단 한다. 성능 면 에서 단 검 자물쇠 보다 우수 하 다. 그러나 이런 쌍 검 자 물 쇠 는 또 하나의 문 제 를 만 날 수 있다.즉, 서로 다른 플랫폼 이나 서로 다른 컴 파일 러 에서 오류 가 발생 할 수 있 습 니 다. 주로 일부 컴 파일 러 가 new Singleton () 의 과정 을 최적화 시 켰 기 때 문 입 니 다. 스 레 드 AB 가 동시에 인 스 턴 스 를 가 져 온다 고 가정 하면 일부 컴 파일 러 에서 A 스 레 드 실례 화 인 스 턴 스 가 나타 날 수 있 습 니 다. 시스템 이 인 스 턴 스에 메모리 에 할당 되 었 지만 인 스 턴 스 의 구성원 변 수 를 초기 화하 지 않 았 을 때.시간 영 화 는 B 프로 세 스에 게 양보 되 었 습 니 다. 이때 인 스 턴 스 는 null 이 아 닙 니 다. B 는 인 스 턴 스 를 가지 고 멤버 변 수 를 조작 합 니 다. 그러나 이때 멤버 변 수 는 초기 화 되 지 않 았 고 결 과 는 crash 일 수 있 습 니 다. 이런 컴 파일 러 문제 가 발생 했 을 때 인 스 턴 스 변 화 량 에 volatile 수식 을 추가 하여 컴 파일 러 최적화 에 대한 방 해 를 제거 해 야 합 니 다.
public class Singleton {
private static Singleton instance;
//private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance(){
if (null == instance){
synchronized(Singleton.class){
if (null == instance)
instance = new Singleton();
}
}
return instance;
}
}
2. 굶 주 린 남자 모드
굶 주 린 사람 모드 는 시스템 이 실 행 될 때 클래스 에 설치 할 때 초기 화 하 는 작업 입 니 다. 외부 대상 이 사용 할 때 어떠한 판단 도 하지 않 고 직접 사용 할 수 있 습 니 다. 효율 적 으로 게으름뱅이 모드 보다 좋 습 니 다. 그러나 게으름뱅이 모드 의 지연 로드 기술 에 비해 시스템 이 이 인 스 턴 스 를 사용 하 든 사용 하지 않 든메모 리 는 처음부터 만들어 집 니 다. 게으름뱅이 의 시간 과 공간 을 바 꾸 는 것 은 정반 대 입 니 다. 굶 주 린 사람 은 공간 을 바 꾸 는 것 입 니 다.
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}// ,
public static Singleton getInstance(){
return instance;
}
}
총화
위의 분석 을 통 해 알 수 있 듯 이 굶 주 린 사람 모델 은 스 레 드 와 병행 하 는 문제 에 직면 하지 않 아 도 된다. 또한 호출 속도 와 응답 시간 에 있어 굶 주 린 사람 모델 은 게으름뱅이 모델 보다 우수 하지만 자원 이용 의 측면 에서 볼 때 게으름뱅이 모델 은 굶 주 린 사람 모델 보다 우수 하 다.
전재 출처 를 밝 혀 주 십시오: http://blog.csdn.net/l2show/article/details/46672061
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모드 - 단일 사례 의 수수께끼기왕 이렇게 된 바 에 야 우 리 는 곧 일례 학습 에 들 어 갈 것 이다. 청매 족 말 형 과 첫눈 에 반 하 는 형 이다. 위의 코드 에서 알 수 있 듯 이 기본적으로 처음부터 있 었 고 대상 이 태 어 나 자마...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.