У меня есть иерархия классов:Множественные иерархии подкласса
class AbstractProcess
{
virtual void Do() = 0;
};
class BuildProcess : public AbstractProcess
{
virtual void Do();
};
class UpdateProcess : public AbstractProcess
{
virtual void Do();
};
Однако, теперь я хочу ввести 2 новых подклассов как процесс также может быть ручной или автоматический (4?). Следующие выглядит слишком долго наматывается:
class ManualBuildProcess : public BuildProcess
{
virtual void Do();
};
class ManualUpdateProcess : public UpdateProcess
{
virtual void Do();
};
class AutomatedBuildProcess : public BuildProcess
{
virtual void Do();
};
class AutomatedUpdateProcess : public UpdateProcess
{
virtual void Do();
};
Это будет только хуже, если я хочу, чтобы ввести дополнительные подклассы либо сборки/Update или Manual/Автоматизированные процессы.
Есть ли лучший дизайн?
C++ поддерживает множественное наследование, поэтому у вас может быть другой базовый класс, который обрабатывает общие функции для ручной работы и один для работы с общей функциональностью для автоматической работы. Это будет означать большее количество классов, но это также может означать лучшие абстракции, а также меньше кода в классах листьев. –
Внедрение ручных/автоматизированных процессов делает бывшие классы абстрактными? Я имею в виду, вы все еще хотите использовать плохой «BuildProcess» без указания, ручной или автоматизированный? –
Энди Т - да, это очень хороший момент. Подчиненные и автоматизированные подклассы теперь станут абстрактными. –