Эта специальная техника, позволяющая избежать конструкций if-else-if, подобных показанным в примере на веб-сайте этих кампаний, можно найти в Чистый код Роберта С. Мартина .Если вы следуете его основным советам, вам не нужно вступать в кампанию;)
Пример на странице, на которую ссылаются, выглядит впечатляюще, главным образом потому, что код плохо отформатирован.Вот как это должно выглядеть:
// Bond class
double calculateValue() {
if(_type == BTP) {
return calculateBTPValue();
} else if(_type == BOT) {
return calculateBOTValue();
} else {
return calculateEUBValue();
}
}
Рекомендуется заменить условие полиморфизмом, что даже не лучшая идея.Лучшим дизайном является использование композиции:
public interface BondType {
public double calculate();
}
public class BOT implements BondType {
//...
}
public class Bond {
private BondType type;
public Bond(BondType type) {
this.type = type;
}
public doublce calculateValue() {
return type.calculate();
}
}
Здесь мы избавились от условий и делегировали вычисления новому классу типа.