Я понимаю шаблон "Декоратор" в самых простых терминах. Идея состоит в том, что один класс оборачивает другой, где метод декоратора желает запустить какой-то другой код до и / или после вызова того же метода для декорированного объекта.
Однако я столкнулся с ситуацией, когда я не могу просто вызвать декорированный метод, так как он имеет некоторые нежелательные побочные эффекты. Однако я действительно хочу, чтобы большая часть этого украшенного метода работала.
Итак, я считаю, что мне нужно разделить декорированный метод на несколько методов, а затем в декораторе я могу вызвать некоторые из них, запустить свой код украшения, а затем вызвать другие, пропуская побочный эффект, который мне не нужен.
Однако для поддержания полиморфизма это означало бы добавление тех методов к интерфейсу, которые реализуют декорированные объекты и объекты декоратора. Это нежелательно; они не должны быть общедоступными, и это фактически означает, что украшенный класс знает, как он будет украшен.
Я считаю, что шаблон «Шаблон», возможно, более уместен, когда абстрактный базовый класс вызывает по очереди каждый из более мелких методов, а «декоратор» просто предоставляет альтернативную реализацию для тех, о которых он заботится. Однако это не совсем «композиция по наследованию», так что вы порекомендуете?