Android 소스 코드 의 조합 모드

장식 자 모드 에서 Context 클래스 까지
관찰자 모드 와 리 셋 메커니즘 이 안 드 로 이 드 소스 코드 를 만 났 을 때
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 에 업로드 되 었 습 니 다.

좋은 웹페이지 즐겨찾기