독서 노트 (1) 제1장 단일 모델
4230 단어 Android 소스 코드 디자인 모드 응용
추가: 다 중 스 레 드 병행 작업, 단일 모드 의 정확 한 쓰기, Volatile 키 워드 를 추가 합 니 다.http://www.race604.com/java-double-checked-singleton/
단일 모드 - 방법:
1. private 구조 함 수 를 가지 고 대외 적 으로 개방 하지 않 습 니 다.
2. static 정적 방법 으로 단일 클래스 대상 을 되 돌려 줍 니 다.
3. 다 중 스 레 드 환경 에서 단일 클래스 의 대상 이 있 고 하나 밖 에 없 음 을 확보한다.
장점:
1. 메모리 에 하나의 인 스 턴 스 만 있 고 메모리 지출 을 줄인다.
2. 자원 의 다 중 점용 을 피한다.
단점:
1. 틈새 없 이 확장 어려움
2. 단일 대상 이 context 를 가지 고 있 으 면 메모리 유출 이 발생 하기 쉽다.
스 레 드 동기 화 를 고려 하여 Volatile 키 워드 를 추가 하 는 단일 모드:
private static volatile SettingsDbHelper sInst = null; // <<< volatile
public static SettingsDbHelper getInstance(Context context) {
SettingsDbHelper inst = sInst; // <<<
if (inst == null) {
synchronized (SettingsDbHelper.class) {
inst = sInst;
if (inst == null) {
inst = new SettingsDbHelper(context);
sInst = inst;
}
}
}
return inst; // <<<
}
자주 사용 하 는 단일 모드 코드 세 션:
static //Double CheckLock(DCL)
class SingletonTwo{
private static SingletonTwo mInstance = null;
//
private SingletonTwo(){
}
public static SingletonTwo getInstance(){
if (mInstance == null) {
synchronized (SingletonTwo.class) { // , DCL ,
if (mInstance == null) {
mInstance = new SingletonTwo();
}
}
}
return mInstance;
}
}
static //
class SingletonThree{
private static SingletonThree mInstance;
//
private SingletonThree(){
}
public static synchronized SingletonThree getInstance(){
if (mInstance == null) {
mInstance = new SingletonThree();
}
return mInstance;
}
}
static //
class SingletonFour{
//
private SingletonFour(){
}
public static SingletonFour getInstance(){
return SingletonFourHolder.mInstance;
}
/*
*
*/
private static class SingletonFourHolder{
private static final SingletonFour mInstance = new SingletonFour();
}
}