Я хочу создать фабрику для создания объектов, реализующих абстрактный интерфейс, которые возвратят ссылку на объект, который хранится внутри, а объекты не реплицируются. Идея в значительной степени такая же, как в дизайне класса Log4cxx/log4j Logger. Я хотел бы также, чтобы скрыть, как много деталей от клиента, как это возможно, то есть, что просмотр обнаженного файла .h не раскрывать детали реализации, как частные члены и т.д. Примера:Строительство завода с хранилищем объектов в C++?
EncryptorRef = Encryptor::getEncryptor("AES");
Интересно, есть ли приняты опубликованные рекомендации/образец кода для такого дизайна, поскольку я не хотел бы изобретать велосипед, и задача довольно распространена. Я думал об использовании статического метода Factory Method, репозитория Singleton внутри и умного указателя/ссылки на конкретный объект в качестве возвращаемого типа. вопросы:
- есть образец простой код для такого дизайна? (код log4cxx слишком сложный для использования в качестве скелета)
- Как скрыть репозиторий от клиента полностью, предполагая, что он видит только чистый абстрактный класс
Encryptor
, определяемый классом encryptor.h? - Вы бы предложили использовать интеллектуальную ссылку или указатель как возвращаемый тип? есть ли стандартная реализация для умных ссылок?
- любые другие предложения будут оценены
спасибо большое!
1 шаг вперед для сокрытия будет предоставлять 1 функцию и сохранить полную фабрично класса внутри страны. – stefaanv
именно так, я думаю, он должен быть одноэлементным, используемым в реализации фабричного метода? – davka
Не обязательно: у вас также может быть класс, создающий экземпляр фабрики с использованием идиомы 'pimpl', которые позволяют иметь несколько фабрик ... если это имеет смысл для вас. Однако в большинстве случаев эти заводы действительно должны быть уникальными и, таким образом, реализованы как «Синглтон». –