![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I wonder how obvious or how stupid or how ubiquitous is the following trick:
Say, I have an enum somewhere outside of my realm:
and my method takes an instance of that enum, and I really do not like switching based on the enum; of course I can have an
(PURPLE STUFF ADDED LATER)
Is not it a poetry? :)
Say, I have an enum somewhere outside of my realm:
enum DataType {
PERSONAL, COMMUNITY, PRISON, ARMY;
};
....
and my method takes an instance of that enum, and I really do not like switching based on the enum; of course I can have an
EnumMap
, but the funny trick is that my strategies are based on this enum type, so I can do just this:
enum Strategy {
PERSONAL {
public void process(Entity entity) {...};
},
COMMUNITY {
public void process(Entity entity) {...};
},
PRISON {
public void process(Entity entity) {...};
},
ARMY {
public void process(Entity entity) {...};
}
abstract public void process(Entity entity);
DEFAULT{
public void process(Entity entity) {...};
};
abstract public void process(Entity entity);
(and so on, add functionality here )
Strategy forDataType(DataType type) {
Strategy candidate = valueOf(type.name());
return candidate == null ? DEFAULT : candidate;
}
};
....
Strategy.forDataType(myType).process(myEntity);
(PURPLE STUFF ADDED LATER)
Is not it a poetry? :)
no subject
Date: 2007-05-26 02:39 pm (UTC)no subject
Date: 2007-05-26 05:33 pm (UTC)no subject
Date: 2007-05-26 05:53 pm (UTC)no subject
Date: 2007-05-26 06:40 pm (UTC)no subject
Date: 2007-05-26 08:25 pm (UTC)no subject
Date: 2007-05-26 10:01 pm (UTC)Вот задача. Есть независимая сущность, данная нам в именах. В принципе, юзеру пофиг, строки это, числа, набор сингтонов. Просто есть набор, он ограничен и неизменен.
Теперь, юзеру нужно запрограммировать действия, зависящие от этих самых сущностей. Если бы функции были законными элементами языка, и если бы нужно было типа по паре функций на сущность, то можно было бы ограничиться двумя таблицами. Скажем, как на джаваскрипте:
no subject
Date: 2007-05-26 10:24 pm (UTC)Обсуждаемый юзер точно знает, какой тип на какую стратегию отображается, ибо он сам эти стратегии и кодирует. Следовательно, речь идёт вовсе не обо "всех входных вариантах", которым несть числа, и где было бы полезно некое автоматизированное нахождение соответствия, как у Вас с совпадающими именами enum.
Что мы вообще обсуждаем - как изящно записать это отображение, используя только синтаксис Java (т.е. конфигурационные файлы не годятся)?
no subject
Date: 2007-05-26 09:16 pm (UTC)Strategy getStrategy(void)
и реализовать его очевидным образом для каждого значения. Потом
data.getStrategy().process(entity);
Всё статически типизировано. Насколько я понимаю, вам нужно решение, которое не меняет DataType ("I have an enum somewhere outside of my realm"), но это по сути значит, что просто нет общего дизайна.
no subject
Date: 2007-05-26 09:49 pm (UTC)Ну даже если бы. DataType не должен никакого понятия иметь о своих будущих юскейсах. Мало ли кто где использует; на всяк чих не наздоровкаешься.
no subject
Date: 2007-05-27 08:07 pm (UTC)no subject
Date: 2007-05-28 05:10 am (UTC)