Какой шаблон разработки является противоположностью Шаблона "фабрика"?

у Neal Grafter есть блог с хорошей кавычкой от него на предмете...

В моем уме, конструкция языка выразительна, если это позволяет Вам записать (и использование) API, который не может писаться (и использоваться) без конструкции.

я сказал бы, что это означает, что можно более естественно выразить мысли в коде.

9
задан Cody Gray 30 January 2012 в 05:52
поделиться

3 ответа

Это правильный способ использования фабрики. Factory - это не только способ создания объектов, но и способ сказать: мне нужна специальная инициализация для таких объектов. С вашей проблемой я думаю, что лучшим решением было бы уведомить factory о каком-либо событии, например, об удалении. Итак, создание вашего объекта будет происходить таким образом: создать, подписать factory на событие вновь созданного объекта. Каждый раз, когда объект удаляется, вы уведомляете об этом фабрику и выполняете необходимое действие.

Если вам не нравится помещать это в фабрику, вы можете делегировать это какому-то другому объекту, например DeathKeeper ;-). Итак, ваш код будет выглядеть примерно так:

//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);

return obj;

Теперь каждый раз, когда вам нужно будет удалить объект, ваш объект будет уведомлять хранителя смерти, и он будет выполнять всю логику удаления. Кстати не знаю как все работает, но вы можете использовать интерфейс IDisposable для выполнения настраиваемой логики для удаления ресурсов, удерживаемых объектом. Решение зависит от того, что есть в вашем проекте, и зависит от вас.

3
ответ дан 4 December 2019 в 21:50
поделиться

Репозиторий можно использовать для удаления сохраняемого объекта, или вы можете использовать метод dispose для очистки объекта, находящегося только в памяти.

4
ответ дан 4 December 2019 в 21:50
поделиться

Я использую шаблон «Recycling Facility», работающий в тандеме с Factory:

  • есть «чистый» метод для каждого класса, который может быть переработан
  • , имеет «уникальный идентификатор» для каждого экземпляра объекта

Каждый раз, когда объект достигает своего конца жизненного цикла, отправляйте его в «Центр утилизации» (RF):

  • RF сохраняет объект в соответствии с некоторой политикой (например, сохраняет только X экземпляров class Y)
  • Когда требуется экземпляр класса Y, Factory "спрашивает" RF, получил ли он его
    • если RF есть под рукой, RF вызывает метод "clean ()" экземпляра и возвращает его Factory

... и так далее.

Надеюсь, это поможет.

2
ответ дан 4 December 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: