iOS App 디자인 모델 개발 에서 교체 기 모델 에 대한 사용 예시
교체 기 는 집합 대상 의 요 소 를 순서대로 방문 하 는 방법 을 제공 하 며,폭 루 구조의 바 텀 표시 와 디 테 일 을 필요 로 하지 않 는 다.집합 에서 요 소 를 옮 겨 다 니 는 기능 은 집합 자체 에서 교체 기 대상 으로 옮 겨 간다.교체 기 는 집합 요 소 를 방문 하고 현재 요 소 를 기록 하 는 인 터 페 이 스 를 정의 합 니 다.서로 다른 교체 기 는 서로 다른 전략 을 실행 할 수 있다.
예시
이렇게 많아
위의 그림 에서 Client 의 오른쪽 은 교체 기 이 고 왼쪽 은 구체 적 인 교체 유형 입 니 다.교체 기 내부 에서 구체 적 으로 교체 가 필요 한 유형 을 인용 한 것 은 이해 하기 어렵 지 않 은 편 입 니 다.하하.사실 구체 적 인 유형 을 결합 시 키 기 위 한 것 으로 보인다.자,다음은 구체 적 인 코드 를 제시 하여 교체 기 모드 를 간단하게 모 의 하 였 습 니 다.
주의:본 논문 의 모든 코드 는 ARC 환경 에서 컴 파일 되 었 습 니 다.
Iterator 클래스 인터페이스
#import <Foundation/Foundation.h>
@interface Iterator:NSObject
-(id)First;
-(id)Next;
-(BOOL)IsDone;
-(id)CurrentItem;
@end
Iterator 클래스 구현
#import "Iterator.h"
@implementation Iterator
-(id)First{
return nil;
}
-(id)Next{
return nil;
}
-(BOOL)IsDone{
return NO;
}
-(id)CurrentItem{
return nil;
}
@end
ConcreteIterator 클래스 인터페이스
#import "Iterator.h"
@class ConcreteAggregate;
@interface ConcreteIterator :Iterator{
ConcreteAggregate *myAggregate;
int current;
}
-(ConcreteIterator*)MyInit:(ConcreteAggregate*)aggregate;
@end
Concrete Iterator 클래스 구현
#import "ConcreteIterator.h"
#import "ConcreteAggregate.h"
@implementation ConcreteIterator
-(ConcreteIterator*)MyInit:(ConcreteAggregate*)aggregate{
myAggregate = aggregate;
return self;
}
-(id)First{
return [myAggregate GetObject:0];
}
-(id)Next{
current++;
if(current< [myAggregate GetCount])
return [myAggregate GetObject:current];
else {
return nil;
}
}
-(BOOL)IsDone{
return current>= [myAggregate GetCount] ?YES:NO;
}
-(id)CurrentItem{
return [myAggregate GetObject:current];
}
@end
Aggregate 클래스 인터페이스
#import <Foundation/Foundation.h>
@class Iterator;
@interface Aggregate:NSObject
-(Iterator*)CreateIterator;
@end
Aggregate 류 실현
#import "Aggregate.h"
#import "Iterator.h"
@implementation Aggregate
-(Iterator*)CreateIterator{
return [[Iterator alloc]init];
}
@end
Concrete Aggregate 클래스 인터페이스
#import "Aggregate.h"
@interface ConcreteAggregate:Aggregate{
NSMutableArray *items;
}
-(int)GetCount;
-(id)GetObject:(int)index;
-(void)InsertObject:(id)Obj;
@end
Concrete Aggregate 류 실현
#import "ConcreteAggregate.h"
#import "Iterator.h"
@implementation ConcreteAggregate
-(id)init{
if(self == [super init]){
items = [NSMutableArray new];
}
return self;
}
-(Iterator*)CreateIterator{
return [[Iterator alloc]init];
}
-(id)GetObject:(int)index{
return [items objectAtIndex:index];
}
-(void)InsertObject:(id)Obj{
[items addObject:Obj];
}
-(int)GetCount{
return [items count];
}
@end
메 인 방법 호출
import <Foundation/Foundation.h>
#import "ConcreteAggregate.h"
#import "Iterator.h"
#import "ConcreteIterator.h"
int main (int argc, const char *argv[])
{
@autoreleasepool {
ConcreteAggregate *a = [[ConcreteAggregate alloc]init];
[a InsertObject:@" "];
[a InsertObject:@" "];
[a InsertObject:@" "];
[a InsertObject:@" "];
NSLog(@"Count:%d", [a GetCount]);
Iterator *i = [[ConcreteIterator alloc]MyInit:a];
while (![i IsDone]) {
NSLog(@"%@, ",[i CurrentItem]);
[i Next];
}
}
return 0;
}
자,위의 네 가지 유형 은 교체 기 모델 을 간단하게 실현 했다.사실은 교체 기 모델 은 집합 대상 의 옮 겨 다 니 는 행 위 를 분리 하고 하나의 교체 기 류 를 추상 화하 여 책임 을 지 는 것 이다.그러면 집합 의 내부 구 조 를 드 러 내지 않 을 뿐만 아니 라 외부 코드 가 내부 데 이 터 를 투명 하 게 방문 할 수 있다.교체 기 모드 는 언제 사용 합 니까?
1.그룹 대상 의 내용 을 방문 하고 내부 표 시 를 누설 하지 않 아야 한다.
2.조합 대상 을 다양한 방식 으로 옮 겨 다 녀 야 한다.
3.다양한 유형의 조합 대상 을 옮 겨 다 니 는 통 일 된 인 터 페 이 스 를 제공 해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.