Если не хотите просто передавать сам класс стратегии как параметр, то остаётся только сделать жэшмапу где ключём будет имя параметра, а значением собсно класс стратегии. При добавлении новой стратегии - добавляеете её же в мапу. Условно как-то так:
class FormBuilder {
public static strategies: { [key: string]: {new(): IFormStrategy} } = {
simple: SimpleFormStrategy,
extended: ExtendedFormStrategy,
};
public build(params: { strategy: string }): Form {
let strategy: IFormStrategy = new FormBuilder.strategies[params.strategy]();
return strategy.execute(params);
}
}
FormBuilder.strategies.custom = CustomFormStrategy;
const formBuilder = new FormBuilder();
formBuilder.build({ strategy: 'custosm' });
Естесно мапу можно сделать приватной и добавление осуществлять публичным методом. Или хранить вообще отдельно. Нужны также проверки что такая стратегия вообще есть, но это всё уже детали...