У меня есть следующий прецедент, много кода, который был плотно соединен по конкретному типу (скажем, Concrete1). Позже выяснилось, что конкретный тип нуждается в изменении, поэтому определяется интерфейс. Например,Тип бетона или интерфейс?
Class ABC {
virtual int foo() = 0;
virtual int getType() = 0;
}
class Concrete1 : public ABC {
int foo() {
... }
int getType() {
return 1;
}
}
class Concrete2 : public ABC {
int foo() {
... }
int getType() {
return 2;
}
}
Для создания объектов использовался статический заводской шаблон. Итак, все места, где был создан объект new Concrete1, заменены на ABCFactory :: createType().
Теперь в коде есть много мест, где мне нужно проверить, является ли объект, возвращаемый createType, конкретным ли Concrete1 или Concrete2 и, соответственно, соответствующей логикой (так много, если еще в коде :().
Я хочу, чтобы избежать много, если еще в коде, как часть этого изменения. Любые предложения?
вещь, которая беспокоит меня много есть
if (abc.getType() == 1) {
...
} else if (abc.getType() ==2) {
...
}
+1 для хороших имен переменных. Это гораздо легче понять, чем просто фосов и баров. –