Android 에서 가장 자주 사용 하 는 디자인 모델 인 안 드 로 이 드 소스 분석 - 조합 모델 (component)
26492 단어 디자인 모드
public void testComponent(){
Composite root = new Composite(" -- ");
Composite c1 = new Composite(" ----- 1");
Composite c2 = new Composite(" ----- 2");
Leaf leaf1 = new Leaf(" ------ 1");
Leaf leaf2 = new Leaf(" ------ 2");
Leaf leaf3 = new Leaf(" ------ 3");
Leaf leaf4 = new Leaf(" ------ 4");
root.addChild(c1);
root.addChild(c2);
c1.addChild(leaf1);
c1.addChild(leaf2);
c1.addChild(leaf3);
c1.addChild(leaf4);
c2.addChild(leaf1);
c2.addChild(leaf2);
c2.addChild(leaf3);
c2.addChild(leaf4);
//
root.paycard("");
}
public class Composite implements IComponent {
/**
*
*/
private List childComponents = new ArrayList();
/**
*
*/
private String name;
/**
* ,
* @param name
*/
public Composite(String name){
this.name = name;
}
/**
* ,
* @param child
*/
public void addChild(IComponent child){
childComponents.add(child);
}
/**
* ,
* @param index
*/
public void removeChild(int index){
childComponents.remove(index);
}
/**
* ,
*/
public List getChild(){
return childComponents;
}
/**
*
* @param preStr , ,
*/
@Override
public void paycard(String preStr) {
//
System.out.println(preStr + "+" + this.name);
// ,
if(this.childComponents != null){
// ,
preStr += " ";
//
for(IComponent c : childComponents){
//
c.paycard(preStr);
}
}
}
}
public class Leaf implements IComponent {
/**
*
*/
private String name;
/**
* ,
* @param name
*/
public Leaf(String name){
this.name = name;
}
/**
* , ,
* @param preStr , ,
*/
@Override
public void paycard(String preStr) {
// TODO Auto-generated method stub
System.out.println(preStr + "-" + name);
}
}
public interface IComponent {
/**
*
*/
public void paycard(String preStr);
}
요약:
실례 와 장면 분석:
그러면 우 리 는 우리 회원 카드 의 소비 에 따라 조합 모델 의 실현 을 모 의 해 봅 시다!let's go!
우선:
1. 우리 의 부품 은 본점, 지점, 가맹 점 이 있 습 니 다!
2. 우리 의 부품 공유 행 위 는 회원 카드 를 긁 는 것 입 니 다.
3. 부품 간 의 차원 관계, 즉 가게 의 차원 관 계 는 본점 아래 에 지점, 지점 아래 에 가맹 점 을 가 질 수 있다 는 것 이다.
우리 의 이 몇 가지 필요 한 조건 이 생 긴 후에 나의 요 구 는 바로 현재 가게 에서 행 사 를 하 는 것 이다. 내 가 본점 에서 카드 를 긁 은 후에 모든 하급 가게 에서 카드 를 긁 는 포인트 총액 을 누적 할 수 있다. 디자인 의 코드 는 다음 과 같다.
이렇게 하면 모든 가게 의 면적 을 누적 할 때 가게 의 개수 에 관심 을 가 질 필요 가 없다. 잎 노드 든 조합 노드 든 관계 가 없다. 즉, 본점 에서 카드 를 사용 하 든 가맹 점 에서 카드 를 사용 하 든 모두 활동 적 점 수 를 정확하게 계산 할 수 있다.
public void testMarket(){
MarketBranch rootMarket=new MarketBranch(" ");
MarketBranch shenBranch=new MarketBranch(" ");
MarketJoin marketJoin1=new MarketJoin(" ");
MarketJoin marketJoin2=new MarketJoin(" ");
rootMarket.add(shenBranch);
shenBranch.add(marketJoin1);
shenBranch.add(marketJoin2);
rootMarket.PayByCard();
}
public class MarketBranch extends Market {
public MarketBranch(String name){
this.name=name;
}
//
List list = new ArrayList();
@Override
public void add(Market m) {
list.add(m);
}
@Override
public void remove(Market m) {
list.remove(m);
}
// ,
@Override
public void PayByCard() {
System.out.println(name + " , ");
for (Market m : list) {
m.PayByCard();
}
}
}
/**
* Created by Administrator on 2017/9/14.
*
*/
public class MarketJoin extends Market{
public MarketJoin(String name){
this.name=name;
}
@Override
public void add(Market m) {
}
@Override
public void remove(Market m) {
}
@Override
public void PayByCard() {
}
}
/**
* Created by Administrator on 2017/9/14.
*
*/
public abstract class Market {
String name;
public abstract void add(Market m);
public abstract void remove(Market m);
public abstract void PayByCard();
}
이미지 비유:
COMPOSITE - Mary 가 오늘 생일 이에 요."나 생일 인 데 선물 하나 줘."
"응, 그래, 상점 에 가면 네가 골 라."
"이 티셔츠 예뻐요.
이 치 마 는 예뻐요.
이 가방 도 괜찮아 요. 사 세 요. "
"야, 세 벌 샀 잖 아. 선물 하나만 주기 로 했 어."
"뭐야, 티셔츠 에 치마 에 가방 까지. 딱 한 벌 맞 네. 아가씨, 싸 주세요.
".......................................................................
View 와 View Group 류 의 사용.안 드 로 이 드 UI 디자인 에서 거의 모든 widget 과 레이아웃 류 는 이 두 가지 종류 에 의존 합 니 다.
ViewGroup 은 이러한 구성 요 소 를 수용 하 는 용기 이 며, 그 자체 도 View 에서 파생 된 것 이다.
이 를 통 해 알 수 있 듯 이 용기 의 ViewGroup 은 잎 노드 의 View 를 포함 할 수 있 습 니 다.
더 낮은 차원 의 하위 뷰 그룹 도 포함 할 수 있 습 니 다.
하위 ViewGroup 은 다음 잎 노드 의 View 와 ViewGroup 을 포함 할 수 있 습 니 다.
바로 View 와 View Group 류 의 사용 입 니 다.안 드 로 이 드 UI 디자인 에서 거의 모든 widget 과 레이아웃 류 는 이 두 가지 종류 에 의존 합 니 다.
1. 대상 View 와 ViewGroup 을 트 리 구조 로 조합 하여 '부분 - 전체' 를 나타 내 는 차원 구조 (View 는 ViewGroup 의 일부분 으로 할 수 있다).조합 모드 는 사용자 로 하여 금 하나의 대상 View 와 조합 대상 View Group 의 사용 에 일치 성 을 가지 게 한다.핫 이 슈 어휘: 부분 - 전체 용기 - 내용 트 리 구조 일치 성 잎 합성 안전성 투명 성
저 희 는 안전 한 조합 모드 를 선택 하 십시오 (조합 대상 에 add, remove, getChild 방법 추가).
public abstract class ViewGroup extends View implements ViewParent, ViewManager {
private static final String TAG = "ViewGroup";
private static final boolean DBG = false;
/** @hide */
public static boolean DEBUG_DRAW = false;
public void addView(View child, int index) {
if (child == null) {
throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup");
}
LayoutParams params = child.getLayoutParams();
if (params == null) {
params = generateDefaultLayoutParams();
if (params == null) {
throw new IllegalArgumentException("generateDefaultLayoutParams() cannot return null");
}
}
addView(child, index, params);
}
public View getChildAt(int index) {
if (index < 0 || index >= mChildrenCount) {
return null;
}
return mChildren[index];
}
ViewManager:
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);
}
사용처
1. ViewPager: 추가 및 제거: 용기
2. 부상 창: 추가 및 제거
3. 데이터베이스: 첨삭 검사
코드 와 데모: 왜 안 올 라 가 는 지 모 르 겠 어 요.
참고 블 로그:
http://blog.csdn.net/hp910315/article/details/51111478
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.