C# e IDisposable
Due dei costrutti piú interessanti ed eleganti del C# sono il lock e lo using, che funzionano in maniera pressocché simile. La feature piú comoda di tali istruzioni é la gestione automatica di quello che avviene implicitamente all'uscita del blocco di codice (e quindi anche in presenza di un eccezione). Nel caso del lock viene chiamato Monitor.Exit, nel caso di using viene chiamato IDisposable.Dispose. Giorni fa, proprio tale "automatismo" mi ha dato un'idea abbastanza simpatica e cioé quella di estendere il concetto di "rilasciare" contenuto nell'interfaccia IDisposable in senso lato. Si potrebbe ad esempio "rilasciare" un oggetto costoso in un pool. Ed é cosí che mi sono "inventato" (*) questo pattern. Siano:
MyClass un oggetto "costoso"
MyClassProxy un proxy all'oggetto "costoso" che implementa IDisposable
MyClassProxyPool un pool di MyClassProxy
Il pezzo di codice che "usa" MyClass e fa uso del pool diventa:
using(MyClassProxy proxy = MyClassProxyPool.GetAProxy())
{
MyClass realClass = proxy.RealObject;
realClass.DoSomething();
...
}
All'uscita del blocco (per un motivo o per un altro) verrá invocato proxy.Dispose(). A questo punto basta fare in modo che tale chiamata restituisca il proxy nel pool ed il gioco é fatto.
I C#!!
-quack
(*) in realtá qualcuno direbbe che i pattern non si inventano ma si scoprono!