生成器模式有兩個核心概念,一個是Director(指導者)、一個是Builder(生成器)。Builder知道如何在缺少某些特定資訊的情況下建造産品,Director知道Builder應該建造什麼,以參數向其提供缺少的資訊來建造特定産品。生成器關注分步建立複雜對象,在最後一步傳回産品。以下以代碼進行說明。
//最終産品
@interface Character : NSObject
{
@private
float protection_;
float power_;
float strength_;
float stamina_;
float intelligence_;
float agility_;
float aggressiveness_;
}
@end
=================================================================
//父類Builder
@interface CharacterBuilder : NSObject
{
@protected
Character *character_;
}
@property (nonatomic,readonly) Character *character;
- (CharacterBuilder *) buildNewCharacter;
- (CharacterBuilder *) buildStrength:(float) value;
- (CharacterBuilder *) buildStamina:(float) value;
- (CharacterBuilder *) buildIntelligence:(float) value;
- (CharacterBuilder *) buildAgility:(float) value;
- (CharacterBuilder *) buildAggressiveness:(float) value;
@end
=================================================================
//實作類Builder
@interface StandardCharacterBuilder : CharacterBuilder
{
}
// overriden methods from the abstract CharacterBuilder
- (CharacterBuilder *) buildStrength:(float) value;
- (CharacterBuilder *) buildStamina:(float) value;
- (CharacterBuilder *) buildIntelligence:(float) value;
- (CharacterBuilder *) buildAgility:(float) value;
- (CharacterBuilder *) buildAggressiveness:(float) value;
@end
=================================================================
//Director
@interface ChasingGame : NSObject
{
}
- (Character *) createPlayer:(CharacterBuilder *) builder;
- (Character *) createEnemy:(CharacterBuilder *) builder;
@end
=================================================================
//用戶端調用代碼
- (void)viewDidLoad
{
[superviewDidLoad];
CharacterBuilder *characterBuilder = [[[StandardCharacterBuilderalloc] init] autorelease];
ChasingGame *game = [[[ChasingGamealloc] init] autorelease];
Character *player = [game createPlayer:characterBuilder];
Character *enemy = [game createEnemy:characterBuilder];
// do something else with the
// player and enemey
}