Точно так же, как я бы не создавал вручную фиктивные объекты в Java, я также не писал бы их вручную в C ++.Ложные объекты - это не просто заглушенные классы, а инструменты тестирования, которые выполняют автоматические проверки, например, проверяют, вызваны ли определенные методы, или что они вызываются по порядку и т. Д. Я бы взглянул на различные инфраструктуры ложных объектов для C ++., googlemock выглядит интересно, но есть и другие.
Что касается абстрагирования концепции управления аудио-ресурсами от реализации, я определенно предпочитаю использовать «интерфейс» C ++ (чистый виртуальный базовый класс).) с общим именем (например, Audio
) и классом реализации, названным для того, что делает его особенным (например, OpenALAudio
).Я предлагаю вам не встраивать слова «интерфейс» или «я» в имена ваших классов.Внедрение типов или программных концепций в имена уже много лет выходит из моды (и может привести к повсеместному переименованию, когда вы, например, повышаете «интерфейс» до полноценного «класса»).
Разработкадля интерфейсов является объектно-ориентированной концепцией и поэтому подходит для C ++.Некоторые из наиболее важных книг по дизайну, специально предназначенные для C ++, посвящены программированию интерфейсов (что в терминах C ++ означает программирование с использованием чисто виртуальных базовых классов).Например, Шаблоны проектирования и Крупномасштабный дизайн программного обеспечения C ++ .