Какой шаблон дизайна противоположен шаблону Factory? - PullRequest
8 голосов
/ 15 сентября 2009

Мне было интересно, есть ли противоположный образец заводского образца. Например, когда необходимо удалить определенный объект, необходимо выполнить дополнительную работу, чтобы отменить конфигурацию, выполненную в объекте фабрики.

Например, расширение фабричного объекта с помощью метода Delete кажется неправильным, поскольку фабричный шаблон является строгим творческим шаблоном.

Обновление: причина, по которой я использую фабрику, заключается в том, что необходимая конфигурация привнесет некоторые зависимости в объект, который не подходит. Помещение этой де-конфигурации в конструктор создаст ту же проблему.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2009

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

3 голосов
/ 16 сентября 2009

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

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

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

return obj;

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

2 голосов
/ 19 сентября 2009

Я использую шаблон "Утилизация отходов", работающий в тандеме с Фабрикой:

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

Каждый раз, когда срок годности объекта истекает, отправьте его в «Средство переработки» (RF):

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

... и т. Д. И т. П.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...