I was wondering if there is an opposite pattern of the factory pattern. For example, when a certain object needs to be deleted some extra work needs to be done, to undo the configuration which was performed in the factory object.
Extending the factory object with a Delete method for instance seems wrong, since the factory pattern is a strict creational pattern.
Update: The reason why I'm using a factory is because the configuration which needs to be done would introduce some dependencies to the object which wouldn't fit. Putting this de-configuration in the constructor would pose the same problem.
A repository could be used to delete a persisted object, or you could use the dispose method to do some cleanup on an in memory only object.
That's right way to use factory. Factory is not only way to create objects, but also the way to say: I need a special initialization for these kind of objects. With your problem I think the best solution would be to notify factory with some event, like disposed. So your object creation will be done in such a way: create, subscribe factory to event of newly created object. Every time object is deleted you`ll notify factory on that and perform action you need.
If you don't like to put this into factory, you can delegate it to some kind of other object, like DeathKeeper ;-). So your code will look sometihng like this:
//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);
return obj;
Now every time you will need to delete object, your object will notify death keeper and it would make all dispose logic. By the way, I do not know how it all works, but you can use IDisposable interface to do the custom logic for disposing resources held by object. The decision depends on what`s there in your project and is up to you.
I use a "Recycling Facility" pattern working in tandem with the Factory:
Each time an object reaches its end-of-life, send it to the "Recycling Facility" (RF):
... and so on so forth.
Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With