Android 소스 코드 의 조합 모드
관찰자 모드 와 리 셋 메커니즘 이 안 드 로 이 드 소스 코드 를 만 났 을 때
Android 소스 코드 의 정적 공장 방법
Android 의 공장 방법 모드
Android 소스 코드 의 명령 모드
Android 소스 코드 의 어댑터 모드
Android 소스 코드 의 외관 모드
교체 기 모드 뿐만 아니 라
정의.
대상 을 트 리 구조 로 구성 하여 '전체 - 부분' 의 차원 구 조 를 표현 하도록 허용 한다.조합 은 고객 으로 하여 금 일치 하 는 방식 으로 개별 대상 과 대상 조합 을 처리 하 게 할 수 있다.구조 형 디자인 모델 에 속 합 니 다.
필드 사용
4. 567917. 한 대상 의 전체 또는 일부 차원 을 나타 내야 한다. 전체 와 부분 을 가 진 차원 구조 에서 한 가지 방식 으로 전체 와 부분의 차 이 를 무시 하고 일치 하 게 그들 을 대 할 수 있 기 를 바란다
4. 567917. 고객 으로 하여 금 서로 다른 대상 차원 의 변 화 를 무시 하 게 하고 클 라 이언 트 는 추상 적 인 구조 재 를 대상 으로 프로 그래 밍 할 수 있 으 며 대상 차원 구조의 디 테 일 에 관심 을 가 질 필요 가 없다
구조
모델 과 관련 된 역할 은 다음 과 같다.
추상 적 인 구조물 역할 (component): 조합 중의 대상 성명 인터페이스 로 적당 한 상황 에서 모든 종류의 공유 인터페이스 의 기본 행 위 를 실현 합 니 다.Component 하위 위 젯 에 접근 하고 관리 할 인 터 페 이 스 를 설명 합 니 다.
이 인 터 페 이 스 는 모든 하위 대상 을 관리 하 는 데 쓸 수 있다.(선택 가능) 재 귀 구조 에서 인 터 페 이 스 를 정의 하여 부모 위 젯 에 접근 하고 적당 한 상황 에서 이 를 실현 합 니 다.
나뭇잎 부재 역할 (Leaf): 조합 나무 에서 잎 노드 대상 을 나타 내 고 잎 노드 에 서브 노드 가 없다.조합 에서 그림 의 대상 을 정의 하 는 행위 입 니 다.
나뭇가지 부재 역할 (Composite): 하위 위 젯 이 있 는 위 젯 의 행동 을 정의 합 니 다.메모리 하위 위 젯.Component 인터페이스 에서 하위 위 젯 과 관련 된 작업 을 수행 합 니 다.
클 라 이언 트 역할 (Client): component 인 터 페 이 스 를 통 해 조합 부품 의 대상 을 조종 합 니 다.
이루어지다
앞에서 사용 한 장면 설명 을 통 해 우 리 는 파일 구조 가 바로 전체 - 부분 차원 의 트 리 구조 라 는 것 을 알 게 되 었 다.만약 우리 가 파일 이름 을 알 고 싶다 면, 우 리 는 그 가 파일 이 든 폴 더 든 상관 할 필요 가 없 을 것 같 아서, 우 리 는 서로 다른 차원 의 대상 의 차 이 를 무시 할 방법 을 생각해 야 한다.다음은 실현 을 살 펴 보 자.
추상 부재 역할, 즉 파일 류 의 추상 인터페이스
/**
*
*/
public abstract class File {
private String name;
public File(String name) {
this.name = name;
}
//
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void watch();
//
public void add(File file) {
throw new UnsupportedOperationException();
}
public void remove(File file) {
throw new UnsupportedOperationException();
}
public File getChild(int position) {
throw new UnsupportedOperationException();
}
}
트 리 구성 요소 역할, 즉 텍스트 파일 과 같은 구체 적 인 형식 파일 입 니 다.
/**
*
*/
public class TextFile extends File {
public TextFile(String name) {
super(name);
}
@Override
public void watch() {
Log.e(" ", " " + getName() + " ");
}
}
나뭇가지 부재 역할, 즉 우리 폴 더
/**
*
*/
public class Folder extends File {
private List mFileList;
public Folder(String name) {
super(name);
mFileList = new ArrayList<>();
}
@Override
public void watch() {
StringBuffer fileName = new StringBuffer();
for (File file : mFileList) {
fileName.append(file.getName() + ";");
}
Log.e(" ", " " + getName() + " , " + mFileList.size() + " , :" + fileName);
}
@Override
public void add(File file) {
mFileList.add(file);
}
@Override
public void remove(File file) {
mFileList.remove(file);
}
@Override
public File getChild(int position) {
return mFileList.get(position);
}
}
클 라 이언 트
/**
*
*/
private void testComposite() {
TextFile textFileA = new TextFile("a.txt");
TextFile textFileB = new TextFile("b.txt");
TextFile textFileC = new TextFile("c.txt");
textFileA.watch();
// textFileA.add(textFileB);//
Folder folder = new Folder(" ");
folder.add(textFileA);
folder.add(textFileB);
folder.add(textFileC);
folder.watch();
folder.getChild(1).watch();
}
여기 서 하 나 는 우리 의 추상 적 인 구조 재 에 조합 방법 과 조작 방법 이 포함 되 어 있 고 일부 조작 방법 은 나뭇잎 구조 재 와 나뭇가지 구조 재 가 모두 실현 되 는 것 이다. 조합 방법 은 나뭇가지 구조 재 로 이 루어 져 야 한다. 즉, 우리 가 나뭇잎 구조 재 에 대한 첨삭 등 조작 이다.
Android 소스 코드 의 조합 모드
다음은 안 드 로 이 드 소스 코드 에서 조합 모델 의 응용 을 생각해 보 자. 조합 모델 의 사용 장면 은 한 대상 의 전체 - 부분 차원 구조, 즉 트 리 구 조 를 나타 낸다.안 드 로 이 드 의 전형 적 인 트 리 구 조 는 바로 우리 의 View 시스템 이 아 닙 니까?앞의 템 플 릿 방법 모델 에서 우 리 는 view 의 구 조 를 그 렸 습 니 다. 여 기 는 더 이상 그리 지 않 겠 습 니 다. 우 리 는 분석 해 보 겠 습 니 다.
Android 소스 코드 에서 View 는 하나의 클래스 (추상 클래스 가 아니 라 인터페이스 가 아 닙 니 다), 즉 우리 의 추상 적 인 구조 입 니 다.ViewGroup 은 View 의 하위 클래스 로 추상 적 인 클래스 로 모든 View 의 용기, 즉 우리 의 나뭇가지 구조 재 입 니 다.구체 적 으로 특정한 컨트롤, 예 를 들 어 Button, TextView 등 은 우리 의 나뭇잎 구조 이다.
관찰 을 통 해 우리 의 View 클래스 에 View 를 삭제 하 는 작업 을 추가 하지 않 았 습 니 다. 뷰 그룹 에 추 가 된 것 은 어디 입 니까?우 리 는 ViewGroup 이 ViewManager 라 는 인 터 페 이 스 를 실현 한 것 을 발견 했다.
/** Interface to let you add and remove child views to an Activity. To get an instance
* of this class, call {@link android.content.Context#getSystemService(java.lang.String) Context.getSystemService()}.
*/
public interface ViewManager
{
/**
* Assign the passed LayoutParams to the passed View and add the view to the window.
* Throws {@link android.view.WindowManager.BadTokenException} for certain programming
* errors, such as adding a second view to a window without removing the first view.
*
Throws {@link android.view.WindowManager.InvalidDisplayException} if the window is on a
* secondary {@link Display} and the specified display can't be found
* (see {@link android.app.Presentation}).
* @param view The view to be added to this window.
* @param params The LayoutParams to assign to view.
*/
public void addView(View view, ViewGroup.LayoutParams params);
public void updateViewLayout(View view, ViewGroup.LayoutParams params);
public void removeView(View view);
}
ViewGroup 이 이 인 터 페 이 스 를 실현 하 는 방법 은 모두 View 를 관리 하 는 능력 이 있 습 니 다.
그렇다면 구 글 개발 자 들 은 왜 이렇게 안 드 로 이 드 뷰 시스템 을 설계 합 니까?조합 모델 은 고 층 모듈 로 하여 금 차원 의 차 이 를 무시 하고 전체 차원 구 조 를 통제 하 는 데 편리 하 게 할 수 있다.예 를 들 어 우 리 는 ViewGoup 에 TextView 를 추가 하거나 LinearLayout 를 추가 해 야 합 니 다. 이 ViewGroup 에 있어 서 는 마찬가지 입 니 다.
끝내다
테스트 코드 가 github 에 업로드 되 었 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 소스 코드 의 정적 공장 방법오늘 우 리 는 간단 한 공장 모델 의 일부 상황 과 안 드 로 이 드 소스 코드 에서 의 응용 을 공유 합 니 다. 간단 한 공장 모델 은 클래스 의 생 성 모델 로 정적 공장 방법 (Static Factory M...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.