Рефакторинг кода 2 дубликатов методов - PullRequest
1 голос
/ 09 ноября 2010

В основном у меня есть 2 метода, которые похожи по функциональности. Единственная разница заключается в том, что контейнер класса отличается. Я пытаюсь добиться того, чтобы объединить эти два метода и каким-то образом сделать контейнер динамическим.

вот 2 метода:

-(NSMutableArray*) parseRequest:(NSArray*)elements {
    NSMutableArray *currentStruct = [NSMutableArray array];
    for (id element elemets) {
        // This is where the difference is
        FriendRequest *friend = [[FriendRequest alloc] init];

        if(nickname != nil) {
            friend.nickname = [element objectAtIndex:0];
        }
        [currentStruct addObject:friend];   
        [friend release];

    }
    return currentStruct;
}

Второе:

-(NSMutableArray*) parseRequest:(NSArray*)elements {
    NSMutableArray *currentStruct = [NSMutableArray array];
    for (id element elemets) {
        // This is where the difference is
        Friend *friend = [[Friend alloc] init];

        if(nickname != nil) {
            friend.nickname = [element objectAtIndex:0];
        }
        [currentStruct addObject:friend];   
        [friend release];

    }
    return currentStruct;
}

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Или вы можете использовать фабричный шаблон:


-(NSMutableArray*) parseRequest:(NSArray*)elements factory:(SEL)factory {
    NSMutableArray *currentStruct = [NSMutableArray array];
    for (id element elemets) {
        NSObject *friend = [self performSelector:factory];

        if(nickname != nil) {
            [friend performSelector:@selector(setNickname) withObject:[element objectAtIndex:0]];
        }
        [currentStruct addObject:friend];

    }
    return currentStruct;
}

-(Friend*) friendFactory {
    return [[[Friend alloc] init] autorelease];
}
1 голос
/ 09 ноября 2010

Сделать этот класс параметром.

-(NSMutableArray*) parseRequest:(NSArray*)elements withClass:(Class)friendClass {
    NSMutableArray *currentStruct = [NSMutableArray array];
    for (id element elemets) {
        // This is where the difference is
        id friend = [[friendClass alloc] init];  // <---

        if(nickname != nil) {
            [friend setNickname:[element objectAtIndex:0]];
        }
        [currentStruct addObject:friend];   
        [friend release];

    }
    return currentStruct;
}

...

-(NSMutableArray*) parseRequest:(NSArray*)elements {
  return [self parseRequest:elements withClass:[Friend class]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...