CoreJava 디자인 모델 의 단일 예 모드
4277 단어 디자인 모드
1. 단일 모드 의 역할:
전체 프로그램 이 한 번 에 실행 되 는 과정 에서 단일 모드 로 설명 되 는 클래스 의 대상 이 있 고 하나 밖 에 없어 야 합 니 다.
2. 실 현 된 장면:
서로 다른 응용 장면 에 대해 단일 모델 의 실현 요구 도 다르다.
3. 단일 모델 의 몇 가지 실현 방식
(1) 가장 기본 적 인 단일 사례 실현:
실현 절차:
1. 구조 방법 을 사유 화하 여 외부 에서 new 방식 으로 대상 을 직접 만 들 수 없 도록 한다.
2. 대외 적 으로 인 스 턴 스 를 얻 는 정적 방법 을 제공 하여 얻 을 수 있 는 방식 을 확보한다.
3. 클래스 내부 에 이러한 대상 을 만 들 고 공 개 된 정적 방법 으로 되 돌려 줍 니 다.
public class BasicSingleTon {
//
private static final BasicSingleTon instance = new BasicSingleTon();
//
public static BasicSingleTon getInstance() {
return instance;
}
//
private BasicSingleTon() {
}
}
그 중에서 Basic SingleTon 의 실례 화 대상 인 인 스 턴 스 를 개인 적 인 정적 인 최종 대상 으로 설정 합 니 다. 그 중에서 final 은 대상 이 방법 영역 에서 의 주 소 를 바 꿀 수 없 도록 하기 위해 서 일 뿐 대상 의 초기 화 시기 에 영향 을 주지 않 습 니 다.final 을 더 하 는 게 좋 을 것 같 아 요.
(2) 굶 주 린 식 (정적 내부 류)
//
class A{
private static final A instance = new A();
public static A newInstance(){
return instance;
}
private A(){}
}
단점: 속성 을 초기 화하 면 대상 을 만 듭 니 다. 호출 되 지 않 았 을 때 공간 메모 리 를 계속 사용 하고 메모 리 를 낭비 합 니 다.
(3) 게으름뱅이 식
//
class B{
private static B instance = null;
public static synchronized B newInstance(){
if(instance == null)instance = new B();
return instance;
}
private B(){}
}
단점: 대상 을 얻 는 정적 방법 은 자 물 쇠 를 채 우 는 것 이기 때문에 병행 효율 이 낮 고 시간 을 낭비 합 니 다.
(4) 게 으 름 종합 식 (장한 식)
정적 내부 클래스 방식 을 이용 한 단일 사례 구현:
생각:
1. 이 클래스 의 대상 을 정적 내부 클래스 의 초기 화 작업 에 의존 하도록 되 돌려 줍 니 다.
2. 이 정적 내부 클래스 가 초기 화 될 때 외부 클래스 의 대상 을 생 성 한 다음 getInstance 에서 되 돌려 줍 니 다.
초기 화 된 설명:
이 초기 화 는 JVM 클래스 를 불 러 오 는 과정 에서 - > 링크 (검증, 준비, 해석) - > 초기 화 에서 초기 화 하 는 것 을 의미 합 니 다.이 초기 화 과정 은 클래스 의 정적 변수 에 구체 적 인 값 을 부여 합 니 다.
한 종류의 초기 화 시기 에 대해 몇 가지 상황 이 있 습 니 다.
1) new 키 워드 를 사용 하여 대상 을 예화 할 때, 클래스 의 정적 필드 를 읽 거나 설정 할 때 (final 에 의 해 수식 되 고, 컴 파일 기간 에 결 과 를 상수 탱크 에 넣 은 정적 필드 를 제외), 그리고 클래스 의 정적 방법 을 호출 할 때.
2) 자바. lang. reflect 패 키 지 를 사용 하여 클래스 를 반사 호출 할 때 클래스 가 초기 화 되 지 않 았 다 면 초기 화 를 먼저 촉발 해 야 합 니 다.
3) 클래스 를 초기 화 할 때 부모 클래스 가 초기 화 되 지 않 은 것 을 발견 하면 먼저 부모 클래스 의 초기 화 를 촉발 해 야 한다.
//
class C{
private static class Holder{
static C instance = new C();
}
public static C newInstance(){
return Holder.instance;
}
private C(){}
}
(5) 이중 판 공 식 의 다 중 스 레 드 단일 사례 실현
synchronized 를 get 대상 으로 하 는 정적 방법 으로 자 물 쇠 를 잠 그 면 효율 에 영향 을 줄 수 있 는 상황 에 대해 서 는 한 번 만 더 띄 우 면 효율 을 최적화 할 수 있 습 니 다.
코드 구현:
public class SyncSingleTon {
private static SyncSingleTon singleTon = null;
public static SyncSingleTon getInstance() {
// , getInstance
if (singleTon == null) {
synchronized (SyncSingleTon.class) {
if (singleTon == null) {
singleTon = new SyncSingleTon();
}
}
}
return singleTon;
}
private SyncSingleTon() {
}
}
(6) 단일 사례 의 가장 간단 한 실현 (enum 매 거 실현
매 거 진 단일 모드 를 실현 하 는 이 유 는 매 거 진 자체 가 스 레 드 안전 하기 때문이다.
생각:
매 거 진 사상 은 공 통 된 정적 final 과 매 거 진 상수 에서 인 스 턴 스 를 내 보 내 는 클래스 입 니 다. 매 거 진 상수 의 구조 방법 을 사용 하여 대응 하 는 대상 을 만 들 수 없 기 때 문 입 니 다.
public enum EnumSingleTon {
INSTANCE
}
public class SingleTon {
public static void main(String[] args) {
EnumSingleTon instance = EnumSingleTon.INSTANCE;
EnumSingleTon instance1 = EnumSingleTon.INSTANCE;
System.out.println("instance1 == instance = " + (instance1 == instance));// true
}
}
면접 문제:
단일 모델 은 면접 에서 자주 만 날 수 있 습 니 다. 프로그래머 의 기 초 를 닦 는 탄탄 한 정도 이기 때 문 입 니 다. 면접 관 에 게 프로젝트 를 했다 고 말 하면 면접 관 이 단일 디자인 모델 을 몇 개 쓰 라 고 했 습 니 다. 쓰 지 못 하면 면접 관 이 믿 을 것 같 습 니까?면접 을 볼 때 매번 의 면접 을 열심히 준비 해 야 합 니 다. 흔 들 림 으로 설령 당신 이 합격한다 하 더 라 도 당신 은 이 회사 에 만족 하지 않 을 가능성 이 높 습 니 다. 자, 우 리 는 본론 으로 들 어 갑 니 다. 사실 단일 디자인 모델 은 면접 에서 굶 주 린 사람 에 게 쓰 는 방법 을 묻 는 사람 이 별로 없습니다. 보통 단일 계획 모델 의 게으름뱅이 식 스 레 드 안전 문 제 를 물 어 봅 니 다.그래서 여러분 들 은 반드시 단일 모델 의 스 레 드 안전 문 제 를 충분히 이해 해 야 합 니 다. 이 몇 가지 모델 에 대해 시간 을 들 이 고 열심히 배 워 야 합 니 다. 면접 에서 단일 모델 에 관 한 어떤 문제 도 두려워 하지 않 을 것 입 니 다. 그 렇 죠?
Best wish!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.