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