Если вы используете C ++, тогда вам следует серьезно рассмотреть возможность использования миксинов (примечание: некоторые другие языки утверждают, что поддерживают некоторые формы миксинов):
Wikipedia: http://en.wikipedia.org/wiki/Mixin
Dr. Dobbs: http://www.ddj.com/cpp/184404445.
Более интересным является «любопытно повторяющийся шаблон» (CRTP):
Wikipedia: http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern.
Я вижу CRTP как приложение миксинов, которое очень полезно.
Как только вы "получите это" (это займет некоторое время), вы поймете, что миксины очень веселые. Они дают вам метод повторного использования кода, который не сталкивается с проблемами повторного использования посредством наследования, но является более гибким и эффективным, чем использование композиции и делегирования.
Интересно, что CRTP позволяет имитировать вызовы виртуальных функций, устраняя издержки (во времени и пространстве) реальных вызовов виртуальных функций, где эта языковая функция специально не требуется. Удаление вызовов виртуальных функций позволяет компилятору обеспечить лучшую оптимизацию, что ведет к повышению производительности.
Список преимуществ можно продолжать и продолжать ... с другой стороны, он синтаксически уродлив в C ++, но вы учитесь жить с этим. Использование макросов для формирования цепочки миксинов может сделать код более читабельным.
По моему мнению, миксины - это многократно используемые фрагменты кода, которые можно использовать для создания класса. Обычно они помогают вам реализовать интерфейс, предоставляя общие реализации методов. Вы в конечном итоге чувствуете, что можете просто «ходить по магазинам» за кусочками, которые составляют ваш класс, и у вас очень мало «слесарного дела», чтобы сделать детали работающими вместе.