class BaseClass {...}
class ChildA:BaseClass {...}
class ChildB:BaseClass {...}
...
Как лучше?
так:
void AnotherClass::func(BaseClass object) {
doCommonStuff1
if (objectInstanceOfChildA) {
doSpecificStuffA1
}
else if(objectInstanceOfChildB) {
dospecificStuffB1
}
else ...
doCommonStuff2
if (objectInstanceOfChildA) {
doSpecificStuffA2
}
else if(objectInstanceOfChildB) {
dospecificStuffB2
}
else ...
...
}
или так:
void AnotherClass::func(ChildA object) {
doCommonStuff1
doSpecificStuffA1
doCommonStuff2
doSpecificStuffA2
...
}
void AnotherClass::func(ChildB object) {
doCommonStuff1
doSpecificStuffB1
doCommonStuff2
doSpecificStuffB2
...
}
...
В первом случае имеем "кашу". Таким кодом только ночью на улицах пугать.
Во втором случае каждый метод достаточно читабелен, но имеет место повторное использование кода. (Запихать общие блоки для различных классов в отдельные методы не представляется возможным, из-за их маленького размера)
Какой бы вариант предпочли вы?
1) Вариант1
2) Вариант2
3) Оба варианта отстой (+ свой вариант в студию)