iOS App 디자인 모델 개발 에서 교체 기 모델 에 대한 사용 예시

5405 단어 iOS디자인 모드
교체 기 모드 는 무엇 입 니까?
    교체 기 는 집합 대상 의 요 소 를 순서대로 방문 하 는 방법 을 제공 하 며,폭 루 구조의 바 텀 표시 와 디 테 일 을 필요 로 하지 않 는 다.집합 에서 요 소 를 옮 겨 다 니 는 기능 은 집합 자체 에서 교체 기 대상 으로 옮 겨 간다.교체 기 는 집합 요 소 를 방문 하고 현재 요 소 를 기록 하 는 인 터 페 이 스 를 정의 합 니 다.서로 다른 교체 기 는 서로 다른 전략 을 실행 할 수 있다.
예시
이렇게 많아
2016330165811106.jpg (385×280)
위의 그림 에서 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.다양한 유형의 조합 대상 을 옮 겨 다 니 는 통 일 된 인 터 페 이 스 를 제공 해 야 한다.

좋은 웹페이지 즐겨찾기