[작업 중인 디자인 모드] 단일 모드 singleton.
단일 모델 은 가장 간단 하고 자주 사용 하 는 디자인 모델 이다. 면접 을 볼 때 새로 졸업 한 학생 이 든 이미 여러 해 동안 일 한 통 이 든 단일 모델 에 대해 서 는 기본적으로 두 마디 할 수 있다.단일 사례 모델 은 주로 다음 과 같은 측면 에 나타난다.
1. 클래스 의 구조 함수 사유 화, 외부 에서 구조 함수 생 성 클래스 의 인 스 턴 스 를 직접 사용 할 수 없 도록 합 니 다.
2. 인 스 턴 스 를 가 져 오 는 방법 을 제공 합 니 다. 외부 에 서 는 이 방법 을 통 해 이미 만 든 인 스 턴 스 대상 을 가 져 올 수 있 습 니 다.
3. 인 스 턴 스 를 얻 는 방법 은 인 스 턴 스 의 유일 성 을 확보 해 야 합 니 다.
4. 인 스 턴 스 를 얻 는 방법 에 따라 유일 성 을 확보 하 는 방식 으로 단일 모델 은 다음 과 같은 몇 가지 로 나 뉜 다.
모드 코드
1. 게으름뱅이 모드
/**
* -
* , 。
* ,
* @author zjl
*
*/
public class Singleton1 {
//
private static Singleton1 singleton;
// ,
private Singleton1(){
}
/**
* public , ,
* ,
* @return
*/
public static synchronized Singleton1 getInstance(){
if(singleton==null){
singleton=new Singleton1();
}
return singleton;
}
}
게으름뱅이 모드 는 대상 의 게 으 름 로드 를 실현 하 였 으 나, 단점 은 getInstance 에 동기 화 키 워드 를 추가 하여 이 방법 은 하나의 스 레 드 만 접근 할 수 있 고 효율 이 비교적 낮 다 는 것 이다.
2. 게으름뱅이 모드 의 속도 문 제 를 해결 하기 위해 검 측 을 도입 한다. 즉, 자 물 쇠 를 채 우기 전에 먼저 판정 을 하고 인 스 턴 스 를 volatile 로 성명 한다.
public class Singleton {
private volatile static Singleton instance; // volatile
private Singleton (){}
public static Singleton getSingleton() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
3. 치 한 모드
/**
*
* , , ,
* @author zjl
*
*/
public class Singleton2 {
/**
* ,
*/
private Singleton2(){}
// ,
private static Singleton2 singleton=new Singleton2();
/**
*
* @return
*/
public static Singleton2 getInstance() {
return singleton;
}
}
치 한 모드 에 서 는 스 레 드 동기 화 문제 가 존재 하지 않 지만 게 으 른 로 딩 이 아 닌 것 이 단점 입 니 다. 대상 이 생 성 되면 바로 인 스 턴 스 를 만 듭 니 다.
4. 정적 내부 클래스
/**
*
* @author zjl
*
*/
public class Singleton3 {
// ,
private Singleton3(){};
// ,
private static class SingletonHodler{
private static final Singleton3 INSTANCE=new Singleton3();
}
/**
* ,
* @return
*/
public static final Singleton3 getInstance(){
return SingletonHodler.INSTANCE;
}
}
정적 내부 클래스 를 만 드 는 방법 은 많이 사용 되 지 않 고 면접 에서 잘 알 지 못 하지만 가장 추천 하 는 방법 입 니 다. 게 으 른 로 딩 을 실 현 했 기 때문에 스 레 드 가 안전 하고 jdk 버 전에 의존 할 필요 가 없습니다.
3. 응용 장면
단일 모드 는 프레임 워 크 에서 많이 응용 된다. 예 를 들 어 spring 의 bean 관 리 는 단일 모드 인지, 데이터 베이스 대상 의 예화 여 부 를 설정 할 수 있다.
장면 코드
비교적 간단 하기 때문에 생략 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.