В огромном сложном приложении интересно, приемлемо ли вводить класс просто для реализации простой новой функциональности.
Например, класс C и D наследует от A (среди многих других классов, которые также наследуются от A).
Если мы хотим представить новые общие функции для C и D, мы можем:
1) ввести новый класс B (и реализовать в этом классе общую функциональность) между родительским классом A и двумя дочерними классами C и D, чтобы B наследовал от A, а C и D наследовал от B
2) добавьте функциональность в родительский класс A и добавьте флаг для использования этой функции только тогда, когда ребенок является типом B или C (и убедитесь, что таким образом мы не сломаем что-либо для остальных классов, которые наследуют от A )
(в delphi я думал, что этот флаг является опубликованным свойством, доступным в инспекторе объектов, что позволяет легко включать или исключать функциональность каждого из дочерних классов)
Неправильно ли следовать второму подходу, чтобы избежать сумасшедшего многоуровневого сложного наследования?
Создание отдельного класса для отдельной функциональности всегда помогает. Вы можете легко разрабатывать, поддерживать, обновлять/модифицировать код; что красота объектно-ориентированного программирования. Итак, я бы предпочел вариант 1.
B
на самом деле является , иA
C
иD
на самом деле являютсяB
.