Шаблон проектирования для очень длинного базового класса - PullRequest
0 голосов
/ 20 июня 2019

Если у меня есть 8 длинных методов, которые будут разделены между 4 дочерними классами (не все из них будут использовать все методы), некоторые будут использовать только 2 других, 4 и т. Д.

Если я создаю базовый класс и каждый из 4 дочерних классов наследуется от базового класса, тогда проблема решается, но я стараюсь избегать использования очень длинного базового класса.

Я могу попытаться разделить базовый класс на большее количество классов в зависимости от того, как они используются, а затем использовать множественное наследование, это еще одно решение.

Есть ли другой способ решения этой проблемы? Что будет оптимальным?

1 Ответ

4 голосов
/ 20 июня 2019

Исходя из того, как вы задали вопрос, первое, что вам нужно серьезно рассмотреть, это то, нужны ли вам занятия вообще.

Одна ловушка, в которую часто попадают новички, это вера в то, что все должно быть вучебный класс.Хотя это правда, что некоторые языки требуют этого, это вариант, но не обязательно - и даже может быть очень плохой идеей - в C ++.

Если только нет фактических отношений «есть»между классами (например, базовый класс представляет Dog, а производные классы представляют типы собак), вероятно, лучше вообще не использовать наследование.

[Существуют обстоятельства, когда уместна иерархия классов, дажеесли нет отношений «есть», но если бы ваша ситуация была такой, вам почти наверняка не пришлось бы задавать вопрос, который у вас есть.]

Вместо этого я бы просто определилвосемь функций, не являющихся членами (то есть не являющихся членами класса) с соответствующими аргументами и типом возвращаемого значения.Аргументы и возвращаемое значение (если есть) могут использоваться как для передачи информации в функцию, так и для передачи информации обратно.

Затем четыре класса вызывают функции по мере необходимости.Однако из вашего описания даже не ясно, что вам нужны эти четыре класса.Возможно, все, что нужно, - это набор функций, которые реализуются путем вызова ваших «8 длинных методов».Эти «8 длинных методов» могут быть реализованы локально в исходном файле, если вам нужно запретить другим программам вызывать их.

Вообще говоря, постарайтесь сделать свой дизайн максимально простым.Если это достижимо без иерархии классов или вообще без определения классов, не используйте классы.

...