안 드 로 이 드 의 건설 자 모델 을 깊이 이해 하 다.
안 드 로 이 드 개발 과정 에서 저 는 많은 안 드 로 이 드 코드 에서 디자인 모델 을 응용 한 것 을 발 견 했 습 니 다.어댑터 모델(각종 adapter),건설 자 모델(Alert Dialog 의 구축)등 이 있 습 니 다.비록 우 리 는 대부분의 디자인 모델 에 대해 알 고 있 지만 디자인 모델 을 응용 하 는 데 있어 많은 사람들 이 이 방면 에 부족 하 다 고 느낀다.그래서 이 글 은 안 드 로 이 드 의 창조 자 모델 을 깊이 이해 합 니 다.
작성 자 모드(Builder Pattern)는 생 성기 모드 라 고도 하 는데 그 정 의 는 다음 과 같다.
separate the construction of a complex object from its representation so that the same construction process can create different representations.복잡 한 대상 의 구축 과 표 시 를 분리 하면 같은 구축 과정 을 서로 다른 표현 으로 만 들 수 있다.
제 이해:하나의 제품(대상)표시(전시)와 구축(창설)과정 을 분리 하면 제품 의 구축 절차 가 같 지만 서로 다른 제품 표시 가 가능 하 다 는 것 입 니 다.
응용 장면
Android 에서 흔히 볼 수 있 는 예 를 들 어 보 겠 습 니 다.
안 드 로 이 드 의 AlertDialog 대화 상자 의 구축 과정 은 바로 건축 자 모델 의 전형 적 인 응용 이다.
빌 더 소스 한번 볼 게 요.
public static class Builder {
private final AlertController.AlertParams P;
public Builder(Context context) {
this(context, resolveDialogTheme(context, 0));
}
public Builder(Context context, int themeResId) {
P = new AlertController.AlertParams(new ContextThemeWrapper(
context, resolveDialogTheme(context, themeResId)));
}
// set
setTitle()
...
...
...
/**
* Creates an {@link AlertDialog} with the arguments supplied to this
* builder.
* <p>
* Calling this method does not display the dialog. If no additional
* processing is needed, {@link #show()} may be called instead to both
* create and display the dialog.
*/
public AlertDialog create() {
// Context has already been wrapped with the appropriate theme.
final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
P.apply(dialog.mAlert);
dialog.setCancelable(P.mCancelable);
if (P.mCancelable) {
dialog.setCanceledOnTouchOutside(true);
}
dialog.setOnCancelListener(P.mOnCancelListener);
dialog.setOnDismissListener(P.mOnDismissListener);
if (P.mOnKeyListener != null) {
dialog.setOnKeyListener(P.mOnKeyListener);
}
return dialog;
}
// show builder , create() show()
public AlertDialog show() {
final AlertDialog dialog = create();
dialog.show();
return dialog;
}
}
원본 코드 를 분석 하면 내부 클래스Builder
가 이 대화 상 자 를 구축 하 는 데 사 용 됩 니 다.1.
builder
을 만 들 때 이AlertController.AlertParams P;
대상 P 를 new 로 만 듭 니 다.2.
bilder
에 각종 매개 변 수 를 설정 할 때 이 매개 변 수 는 모두 대상 P 에 존재 합 니 다.3.그리고
builder
매개 변 수 를 설정 한 후에 호출create
방법 을 사용 합 니 다.
final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
P.apply(dialog.mAlert); // mAlert
이 방법 은 먼저 외부 클래스AlertDialog
의 구조 방법 을 호출 하고new
외부 클래스 대상 을 추출 한 다음p.apply()
방법 은 P 라 는 대상 을 내부 클래스 의 속성 할당AlertController
대상mAlert
에 게 부여 한다.이렇게 해서 한 번 의 구축 이 완성 되 었 다.다음은 AlertDialog 부분 소스 입 니 다.
public class AlertDialog extends Dialog implements DialogInterface {
// builder
private AlertController mAlert;
// builder
protected AlertDialog(Context context) {
this(context, 0);
}
protected AlertDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
this(context, 0);
setCancelable(cancelable);
setOnCancelListener(cancelListener);
}
protected AlertDialog(Context context, @StyleRes int themeResId) {
this(context, themeResId, true);
}
AlertDialog(Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
super(context, createContextThemeWrapper ? resolveDialogTheme(context, themeResId) : 0,
createContextThemeWrapper);
mWindow.alwaysReadCloseOnTouchAttr();
mAlert = new AlertController(getContext(), this, getWindow());
}
}
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 안 드 로 이 드 개발 자 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.