Вы правы, чрезмерная логика if..then
или switch
- это запах кода , и ее почти всегда можно превратить в нечто более элегантное.В этом случае фабрика, основанная на имени, может быть преобразована в словарь с ключом в качестве этого имени и значением в качестве функции для возврата
var dictionary = {};
dictionary[TYPES.TEXT] = Text;
dictionary[TYPES.WORD] = Word;
dictionary[TYPES.PARAGRAPH] = Paragraph;
dictionary[TYPES.TABLE] = Table;
createElement = function(name, data){
return new dictionary[name](data);
}
Живой пример: http://jsfiddle.net/KkMnd/
РЕДАКТИРОВАТЬ: Эта строка в методе createElement
может / должна сначала проверить, что что-то сконфигурировано для переданного TYPES.*
. Хороший способ - проверить, есть ли элемент в словаре перед попыткой вызоваэтот метод.
return (typeof dictionary[name] == 'function') ? new dictionary[name](data) : some_default_value;