2010-11-09 2 views
1

Fondamentalement, j'ai deux méthodes qui sont similaires dans la fonctionnalité. La seule différence est le conteneur de classes qui sont différentes. Ce que j'essaie de réaliser, c'est d'unifier ces deux méthodes et de faire en sorte que le conteneur soit dynamique.Refactorisation de code de 2 méthodes en double

voici les 2 méthodes:

-(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; 
} 

Deuxième:

-(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; 
} 

Répondre

1

faire cette classe un paramètre.

-(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]]; 
} 
1

Ou vous pouvez utiliser le modèle d'usine:


-(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]; 
} 
Questions connexes