iOS 응용 개발 에서 디자인 모델 의 조합 모델 을 활용 한 실례 분석
조합 모드 는 우리 로 하여 금 같은 기본 유형의 대상 을 트 리 구조 에 조합 할 수 있 게 한다.그 중에서 부모 노드 는 같은 유형의 하위 노드 를 포함한다.다시 말 하면 이런 나무 모양 구 조 는'부분-전체'의 차원 구 조 를 형성한다.무엇이'부분-전체'의 차원 구조 입 니까?그것 은 대상 의 조합 과 잎 노드 를 포함 하 는 단일 대상 의 차원 구조 이다.모든 조합 체 에 포 함 된 다른 노드 는 잎 노드 나 다른 조합 체 일 수 있다.이런 관 계 는 이 차원 구조 에서 반복 된다.모든 조합 이나 잎 노드 는 같은 기본 유형 이 있 기 때문에 같은 조작 은 클 라 이언 트 에서 유형 검 사 를 하지 않 아 도 됩 니 다.클 라 이언 트 가 조합 과 잎 노드 를 조작 할 때 그들의 차 이 를 무시 할 수 있다.
조합 모델:대상 을 나무 구조 로 조합 하여'부분-전체'의 차원 구 조 를 나타 낸다.조합 은 사용자 로 하여 금 하나의 대상 과 조합 대상 의 사용 에 대해 일치 성 을 가지 게 한다.
조합 모드 는 언제 사용 합 니까?
1.대상 의 추상 적 인 나무 모양 표현(부분-전체 차원 구조)을 얻 고 싶다.
2.클 라 이언 트 가 조합 구조의 모든 대상 을 통일 적 으로 처리 하도록 하려 고 합 니 다.
코코아 터치 프레임 에 조합 모드 사용 하기
코코아 터치 프레임 에서 UIView 는 하나의 조합 구조 로 구성 되 어 있다.모든 UIView 의 인 스 턴 스 는 UIView 의 다른 인 스 턴 스 를 포함 하여 통 일 된 트 리 구 조 를 형성 할 수 있 습 니 다.클 라 이언 트 가 단일 UIView 대상 과 UIView 의 조합 을 통일 적 으로 취급 하도록 합 니 다.
창의 UIView 는 내부 에서 하위 보 기 를 형성 합 니 다.그들의 모든 보 기 는 다른 보 기 를 포함 하여 자신의 하위 보기 로 변 할 수 있 는 초 보기 입 니 다.추가 한 다른 UIView 는 하위 보기 가 됩 니 다.그들의 모든 보 기 는 다른 보 기 를 포함 하여 자신의 하위 보기 로 변 할 수 있 는 초 보기 입 니 다.UIView 대상 은 하나의 초 보기 만 있 을 수 있 고 0 에서 여러 개의 키 보기 가 있 을 수 있 습 니 다.
보기 조합 구조 가 그림 이벤트 처리 에 참여 합 니 다.초 보 기 를 표시 로 렌 더 링 을 요청 할 때 메 시 지 는 초 보기 에서 처리 되 고 하위 보기 로 전 달 됩 니 다.모든 트 리 에 퍼 져 있 는 다른 하위 보기 로 메시지 가 전 파 됩 니 다.같은 유형 인 UIView 이기 때문에 통일 적 으로 처리 할 수 있 습 니 다.
조합 모드 의 인 스 턴 스 참조
조합 모델 의 적용 장 소 는 일반적으로 수요 에서 부분 과 전체적인 차원 을 나타 내 는 구 조 를 발견 할 때 사용자 가 조합 대상 과 하나의 대상 의 차 이 를 무시 하고 조합 구조 중의 모든 대상 을 통일 적 으로 사용 하 기 를 원할 때 조합 모델 을 사용 하 는 것 을 고려 해 야 한다.조합 모델 은 기본 대상 과 조합 대상 의 클래스 구 조 를 정의 했다.기본 적 인 대상 은 더욱 복잡 한 조합 대상 으로 조합 할 수 있 고 이 조합 대상 은 조합 할 수 있다.이렇게 끊임없이 귀착 된다.그러면 고객 코드 에서 기본 적 인 대상 에 사용 되 는 모든 곳 에서 조합 대상 을 사용 할 수 있다.이렇게 많은 말 을 했 는데 사실은 조합 모델 은 고객 이 조합 구조 와 단일 대상 을 일치 하 게 사용 할 수 있 도록 하 는 것 이다.그렇다면 다음은 유형 구조 도 를 보 여 드 리 겠 습 니 다.보시 면 아 실 겁 니 다.
위의 그림 에서 클래스 간 의 관 계 는 기본적으로 나무의 관계 로 분류 할 수 있다.뿌리(Component),가지 와 마디(Composite),잎 노드(Leaf)가 있 습 니 다.논리 가 뚜렷 하고 구조 도 간단 하 다.사실은 잎 노드(Leaf)와 가지 노드(Composite)가 모두 뿌리 노드(Component)를 계승 하 는 것 과 같다.네,간단 한 코드 를 드 리 겠 습 니 다.
주의:본 논문 의 모든 코드 는 ARC 환경 에서 컴 파일 되 었 습 니 다.
ComComponents 클래스 인터페이스//대응 그림 의 Component
#import <Foundation/Foundation.h>
@interface ComComponents:NSObject{
NSString *name;
}
-(ComComponents*)MyInit:(NSString*)myName;
-(void)Add:(ComComponents*)c;
-(void)Remove:(ComComponents*)c;
-(void)Display:(int)depth;
@end
ComComponents 류 실현
#import "ComComponents.h"
@implementation ComComponents
-(ComComponents*)MyInit:(NSString *)myName{
name = myName;
return self;
}
-(void)Add:(ComComponents *)c{
return;
}
-(void)Remove:(ComComponents *)c{
return;
}
-(void)Display:(int)depth{
return;
}
@end
Leaf 클래스 인터페이스
#import "ComComponents.h"
@interface Leaf:ComComponents
-(Leaf*)MyInit:(NSString*)myName;
@end
Leaf 클래스 구현
#import "Leaf.h"
@implementation Leaf
-(Leaf*)MyInit:(NSString *)myName{
name = myName;
return self;
}
-(void)Add:(ComComponents *)c{
NSLog(@"Cannot add to a leaf");
}
-(void)Remove:(ComComponents *)c{
NSLog(@"Cannot remove from a leaf");
}
-(void)Display:(int)depth{
NSLog(@"[%dLevel]%@", depth,name);
}
@end
Composite 클래스 인터페이스
#import "ComComponents.h"
@interface Composite :ComComponents{
NSMutableArray *children;
}
-(Composite*)MyInit:(NSString*)myName;
@end
Composite 클래스 구현
#import "Composite.h"
@implementation Composite
-(Composite*)MyInit:(NSString *)myName{
name = myName;
children= [NSMutableArray new];
return self;
}
-(void)Add:(ComComponents *)c{
[children addObject:c];
}
-(void)Remove:(ComComponents *)c{
[children addObject:c];
}
-(void)Display:(int)depth{
NSLog(@"[%dLevel]%@", depth,name);
for(ComComponents *component in children)
[component Display:depth +1];
}
@end
메 인 방법 호출
#import <Foundation/Foundation.h>
#import "Leaf.h"
#import "Composite.h"
int main (int argc,const char *argv[])
{
@autoreleasepool{
Composite *root = [[Composite alloc]MyInit:@"root"];
[root Add:[[Leaf alloc]MyInit:@"Leaf A"]];
[root Add:[[Leaf alloc]MyInit:@"Leaf B"]];
Composite *comp = [[Composite alloc]MyInit:@"Composite X"];
[comp Add:[[Leaf alloc]MyInit:@"Leaf XA"]];
[comp Add:[[Leaf alloc]MyInit:@"Leaf XB"]];
[root Add:comp];
Composite *comp2 = [[Composite alloc]MyInit:@"Composite XY"];
[comp2 Add:[[Leaf alloc]MyInit:@"Leaf XYA"]];
[comp2 Add:[[Leaf alloc]MyInit:@"Leaf XYB"]];
[comp Add:comp2];
[root Add:[[Leaf alloc]MyInit:@"Leaf C"]];
Leaf *leaf = [[Leaf alloc]MyInit:@"Leaf D"];
[root Add:leaf];
[root Remove:leaf];
[root Display:1];
}
return 0;
}
좋아,조합 모델 의 구 조 는 그런대로 간단 한 편 이 야.관건 은 역시 활 학 활용 이 야.이것 이 야 말로 정말 어 려 운 거 야!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.