Android 디자인 모드 시리즈 의 단일 예 모드
이 모델 은 다른 몇 가지 모델 에 비해 독립 적 이 고 자신의 실례 화 수량 이 단일 하 다 는 것 만 책임 집 니 다.(사용자 에 게 어떤 실례 를 만들어 주 는 것 을 고려 하 는 것 이 아니 라)재 미 있 고 감각 적 으로 깨끗 한 모델 입 니 다.저 는 이 모델 을 매우 좋아 합 니 다.
안 드 로 이 드 에서 많은 부분 에서 단일 모델 을 사 용 했 습 니 다.본 고 는 입력 법 관리자 인 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).유형 조작 보다 유연 하 다.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 디자인 모델 시리즈 의 단일 사례 모델 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.