Android 디자인 모드 시리즈 의 단일 예 모드

단일 모드 는 GOF 의 23 가지 디자인 모델 중 가장 간단 한 것 이 라 고 할 수 있다.
이 모델 은 다른 몇 가지 모델 에 비해 독립 적 이 고 자신의 실례 화 수량 이 단일 하 다 는 것 만 책임 집 니 다.(사용자 에 게 어떤 실례 를 만들어 주 는 것 을 고려 하 는 것 이 아니 라)재 미 있 고 감각 적 으로 깨끗 한 모델 입 니 다.저 는 이 모델 을 매우 좋아 합 니 다.
안 드 로 이 드 에서 많은 부분 에서 단일 모델 을 사 용 했 습 니 다.본 고 는 입력 법 관리자 인 InputMethodManager 를 예 로 들 어 분석 하고 자 합 니 다.
단일 모드,Singleton Pattern 은 그 특유 의 장점 으로 시스템 의 전역 변 수 를 대체 할 수 있어 응용 이 매우 광범 위 하 다.
1.의도
하나의 인 스 턴 스 만 있 고 전체 방문 점 을 제공 합 니 다.
유일한 사유 구조
2.구조

안 드 로 이 드 에는 시간,입력 법,계 정,상태 표시 줄 등 시스템 등급 의 전역 변수 가 많 습 니 다.안 드 로 이 드 에 서 는 이러한 것들 에 대해 직접적 이거 나 간접 적 으로 단일 모드 를 사 용 했 습 니 다.

입력 법 을 예 로 들 어 위의 그림 을 실제 상황 으로 수정 합 니 다.
매우 간단 하지만 한 가 지 는 위 에서 도 synchronized 키 워드 를 보 았 습 니 다.다 중 스 레 드 환경 에서 단일 모델 은 자신의 인 스 턴 스 수량 을 확보 하기 위해 반드시 병행 통 제 를 할 것 입 니 다.
이러한 스 레 드 안전 사례,크로스 프로 세 스 의 사례,파라미터 화 된 사례 등 상황 은 본 고의 범 위 를 넘 어 섰 고 많은 것 과 관련 되 어 있어 큰 화제 이 고 전개 하기 어렵다.
3.코드:

public final class InputMethodManager { 
static final Object mInstanceSync = new Object();//   
//         
static InputMethodManager mInstance; 

//  api 
static public InputMethodManager getInstance(Context context) { 
return getInstance(context.getMainLooper()); 
} 

/** 
*   api,      api   
* @hide      api 
*/ 
static public InputMethodManager getInstance(Looper mainLooper) { 
synchronized (mInstanceSync) { 
if (mInstance != null) { 
return mInstance; 
} 
IBinder b = ServiceManager.getService(Context.INPUT_METHOD_SERVICE); 
IInputMethodManager service = IInputMethodManager.Stub.asInterface(b); 
mInstance = new InputMethodManager(service, mainLooper); 
} 
return mInstance; 
} 
} 
클 라 이언 트 호출,예 를 들 어 contextimpl 의 getSystemService()방법 은 다음 과 같 습 니 다.

class ContextImpl extends Context{ 
@Override 
public Object getSystemService(String name) { 
if (WINDOW_SERVICE.equals(name)) { 
//... ...     n if,else if 
} else if (INPUT_METHOD_SERVICE.equals(name)) { 
//             
return InputMethodManager.getInstance(this); 
} else if (KEYGUARD_SERVICE.equals(name)) { 
//... ...     n if,else if 
} else if (ACCESSIBILITY_SERVICE.equals(name)) { 
//    ,     
return AccessibilityManager.getInstance(this); 
} else if (LOCATION_SERVICE.equals(name)) { 
//... ...     n if,else if 
} else if (NFC_SERVICE.equals(name)) { 
return getNfcManager(); 
} 
return null; 
} 
} 
아주 간단 하고 깨끗 한 패턴 입 니 다.
4.효과
(1).생 성 모드 입 니 다.
(2)유일한 실례 에 대한 제 어 된 접근
(3).전역 변수 가 네 임 스페이스 를 오염 시 키 는 것 을 피한다.
(4).조작 과 표시 에 대한 정 화 를 허용 한다.
(5).유형 조작 보다 유연 하 다.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 디자인 모델 시리즈 의 단일 사례 모델 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기