[디자인 모델] 단일 디자인 모델 의 N 중 자바 실현 방법
5418 단어 단일 디자인 모드
특징.
단일 모드 의 특징:
1. 하나의 인 스 턴 스 만 있 을 수 있 습 니 다.
2. 자신의 인 스 턴 스 를 만들어 야 합 니 다.
3. 모든 다른 대상 에 게 이 인 스 턴 스 를 제공 해 야 합 니 다.
굶 주 린 한식 일례 모델
사전 로드 법 이 라 고도 부 르 는데 실현 방식 은 다음 과 같다.
class Single
{
private Single()(
Syustem.out.println("ok");
)
private static Single instance = new Single();
public static Single getInstance(){
return instance;
}
}
장점: 스 레 드 가 안전 하고 호출 할 때 반응 속도 가 빠 르 며 클래스 로 딩 과 동시에 정적 대상 을 만 들 었 습 니 다.
단점: 자원 이용 효율 이 높 지 않 아 이 인 스 턴 스 가 필요 하지 않 을 수도 있 지만 시스템 에 불 러 왔 습 니 다.
게으름뱅이
지연 로드 법 이 라 고도 부 르 는데 실현 방식 은 다음 과 같다.
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
지연 로드 법 은 단일 스 레 드 환경 에 적 용 됩 니 다. 스 레 드 가 안전 하지 않 습 니 다. 다 중 스 레 드 를 도입 할 때 getInstance () 방법 을 동기 화하 여 보호해 야 합 니 다. 그렇지 않 으 면 Lazy Singleton 의 두 개의 다른 인 스 턴 스 로 돌아 갈 수 있 습 니 다.예 를 들 어 하나의 스 레 드 는 인 스 턴 스 를 null 로 판단 한 후에 새로운 인 스 턴 스 를 만 들 지 못 했 습 니 다. 다른 스 레 드 는 이때 인 스 턴 스 를 null 로 판단 합 니 다. 그러면 두 스 레 드 는 두 개의 Lazy Singleton 인 스 턴 스 를 만 들 것 입 니 다.
getInstance () 방법 을 동기 화 방법 으로 바 꿀 수 있 습 니 다. 그러면 상기 문 제 를 피 할 수 있 습 니 다. 개 선 된 단일 모델 은 다음 과 같 습 니 다.
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
장점: 자원 이 용 률 이 높 아 getInstance 를 실행 하지 않 으 면 인 스 턴 스 가 되 지 않 습 니 다.
단점: 첫 번 째 로 딩 시 반응 이 빠 르 지 않 고 다 중 스 레 드 사용 불필요 한 동기 화 비용 이 많이 듭 니 다.
여기 서 단점 은 getInstance () 방법 을 호출 할 때마다 동기 화 되 어야 하 며, 동기 화 는 필요 하지 않 을 때 가 많 습 니 다. 이 는 성능 을 크게 떨 어 뜨 릴 수 있 습 니 다 (특히 getInstance 방법 을 여러 번 호출 해 야 하 는 곳 에서).
DCL 단일 모드
지연 로드 법의 동기 화 실현 에 따 른 성능 이 낮은 문제 에 대해 서 는 getInstance () 방법 을 호출 할 때마다 동기 화 되 지 않도록 DCL, 즉 이중 검사 잠 금 (Double Check Lock) 방법 을 사용 할 수 있 습 니 다.실현 방식 은 다음 과 같다.
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized(LazySingleton.class){
if(instance == null){
instance = new LazySingleton();
}
}
}
return instance;
}
}
장점: 자원 이 용 률 이 높 고 getInstance 를 실행 하지 않 으 면 인 스 턴 스 가 되 지 않 으 며 다 중 스 레 드 에서 효율 이 높 습 니 다.
단점: 처음 불 러 올 때 반응 이 좋 지 않 습 니 다. 자바 메모리 모델 의 일부 원인 으로 인해 가끔 실패 할 수 있 습 니 다. 높 은 병발 환경 에서 도 어느 정도 결함 이 있 습 니 다. 발생 확률 은 낮 지만.
static 내부 클래스 단일 예 모드
이 방법 은 DCL 방법 이 병발 환경 에서 의 결함 을 해결 하기 위해 제 기 된 것 이다. DCL 이 병발 프로 그래 밍 에 존재 하 는 문제점 에 대해 서 는 이 글 을 참고 할 수 있다. http://blog.csdn.net/ns_code/article/details/17348313 의 후반 부, 그 실현 방식 은 다음 과 같다.
class Single
{
private Single()(
Syustem.out.println("ok");
)
private static class InstanceHolder{
private static final Singlet instance = new Single();
}
public static Single getInstance(){
return InstanceHolder.instance;
}
}
장점: 스 레 드 가 안전 하고 자원 이 용 률 이 높 으 며 getInstance 를 실행 하지 않 으 면 인 스 턴 스 가 되 지 않 습 니 다.
단점: 처음 불 러 올 때 반응 이 좋 지 않 습 니 다.
여기 서 마지막 방법 에 대해 다음 과 같은 기본 지식 을 보충 합 니 다. 클래스 내부 클래스 (static 수식 이 있 는 구성원 내부 클래스) 는 외부 클래스 의 구성원 에 해당 하 며, 처음 사용 할 때 만 불 러 옵 니 다. 클래스 로 더 가 외부 클래스 를 불 러 올 때 불 러 오지 않 습 니 다.그래서 자원 이 용 률 이 높다.
요약: 자바 에서 병행 프로 그래 밍 과 관련 되 기 때문에 효율, 안전성 등 문 제 를 고려 하여 보통 굶 주 린 한식 단일 모델 이나 static 내부 유형의 단일 모델 을 자주 사용 하 는데 이들 의 장단 점 이 마침 뒤 바 뀌 었 기 때문에 구체 적 인 상황 에 따라 사용 해 야 한다.
참고 자료: http://blog.csdn.net/ns_code/article/details/17348313
http://write.blog.csdn.net/postlist/0/all/draft
http://www.myexception.cn/software-architecture-design/1235112.html
http://m.blog.csdn.net/blog/codezjx/8883599
http://blog.sina.com.cn/s/blog_6d2890600101gb8x.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 의 단일 디자인 모델 예제 상세 설명2)다른 프로그램 new 와 같은 대상 을 만 들 지 못 하 게 하 는 이상 이 종 류 는 자신의 내부 에 대상 을 만들어 야 합 니 다.그렇지 않 으 면 이 종 류 는 영원히 대상 을 만 들 수 없습니다. 게으름뱅...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.