Рассмотрим следующую ситуацию: у меня есть класс A
, состоящий из различных частей Part 1
, Part 2
и т. Д., И я хочу расширить функциональность A
путем подкласса.Ищите шаблон дизайна: переопределение метода без подкласса
Проблема: если я попытался переопределить поведение отдельных «частей» (есть лучший термин?) Таким же образом, мне пришлось бы создать один подкласс для каждой части, которая меняется, что становится беспорядочным и запутанным быстро.
В двух словах: Я хочу переопределить методы класса, не прибегая к подклассу .
Я думал о решении, но я не уверен, если это хорошая идея:
Предположим, что я хочу, чтобы переопределить Part::Method
. Вместо того, чтобы использовать механизм наследования при условии моего языка, я мог бы «подделка» способность наиважнейшей по:
- Проходя мимо
Part
класса функциюMethodOverride
(например, в виде анонимной функции), и - имеющей
Part::Method
вызоваMethodOverride
Я вижу два недостатки такого подхода:
- он игнорирует (отлично с apable но непрактично) особенность наследования языка, который может иметь непредсказуемые побочные эффекты
- доступа непубличных членов
Part
становится хлопот
Мой вопрос (ы): Существует ли установленный шаблон дизайна который разрешает описанную проблему аналогичным (или лучшим) способом? Есть ли недостатки Я пропустил?
Похоже, вы описываете [шаблон стратегии] (https://sourcemaking.com/design_patterns/strategy), но я не совсем понимаю, что вы подразумеваете под «частью». Возможно, дизайн будет улучшен путем разделения каждой части на собственный класс. – jaco0646
У вас могут быть лучшие ответы, если вы укажете, что такое A, часть 1, часть 2 ... контекст имеет большое значение. – Fuhrmanator