У меня следующая проблема.
Я получил класс PluginLoader
, который наблюдает за загрузкой плагинов. Он делит подэтапы работы на другие классы, такие как Plugin
. Plugin
вызывает функции PluginLoader
при его обработке. Давайте назовем эту функцию AddData
. Здесь PluginLoader
должен проверить, являются ли полученные данные дубликатами. Для этого используется класс ConflictResolver
. Теперь моя проблема в том, как сделать объект ConflictResolver
доступным для PluginLoader
. Есть 3 способа, которые я вижу из этого.
- Используйте класс
ConflictResolverFactory
и создайте объект ConflictResolver
для PluginLoader
.
- Передайте построенный
ConflictResolver*
в PluginLoader
через его конструктор или функцию-член SetConflictResolver
, сохраните его в переменной-члене и используйте его позже. Оба способа имеют свои недостатки. Если я передам его в конструктор, мне придется выбросить, если указатель равен NULL
. И я не могу использовать исключения, как это принято здесь. Если я передам его через SetConflictResolver
, я не смогу гарантировать, что эта функция действительно будет вызываться пользователем. Или мне придется проверить, является ли элемент ConflictResolver*
NULL
везде, где я его использую.
- Передайте метод
ConflictResolver &
PluginLoader
s Load
, где будет выполнена вся работа. В свою очередь, метод загрузки Plugin
s должен также принять ConflictResolver &
(хотя он не используется для него) и передать его обратно в AddData
, где PluginLoader
сможет его использовать.
Третий метод безопаснее, чем второй. Тем не менее, я должен передать ссылку, даже если она не используется.
Если первый метод не может быть использован, каков наилучший способ сделать это?
Извинения за стену: wq!