Nell'articolo "
The Factory Design Pattern",
Amit Goel individua all'interno del Framework .NET delle classi che implementano il pattern Factory Method (
GoF, pp. 107-116). Uno dei suoi esempi riguarda le classi del namespace
System.Security.Cryptography. Se si analizza con attenzione, per esempio il "ramo"
SymmetricAlgorithm-
DES-
DESCryptoServiceProvider, si trova il pattern in una variante non molto ortodossa.
L'abbiamo chiamata
Factory EndoMethod per il fatto che il
FactoryMethod della classe
Creator restituisce sempre
Creator e non
Product come nella variante originale del pattern e il
FactoryMethod della classe
ConcreteCreator restituisce a sua volta
ConcreteCreator e non
Product (mi sono ispirato al termine
endomorfismo che i matematici :-) incontrano nelle primissime ore di corso di
Teoria delle categorie - un altro amore mio).
Vediamo adesso l'esempio in causa (SymmetricAlgorithm-DES-DESCryptoServiceProvider):
- la classe astratta
System.Security.Cryptography.SymmetricAlgorithm fa da
Creator;
- il
FactoryMethod sarebbe il metodo
Create che però invece di restituire
Product restituisce se stessa (è quindi un
FactoryEndoMethod);
- la classe
System.Security.Cryptography.DES fa da
ConcreteCreator, anche se in questa variante non è così concreta bensì astratta come la
Creator da cui deriva, e il suo
FactoryMethod è di nuovo un
FactoryEndoMethod perché restituisce se stessa (
DES);
- il fatto del
FactoryEndoMethod obbliga la classe
Product ad essere identica con la classe
ConcreteCreator;
- la classe
System.Security.Cryptography.DESCryptoServiceProvider fa in questo esempio da
ConcreteProduct.
Se troverò un po' di tempo (boh...) varrebbe la pena di fare in un articolo un po' di teoria in modo più serio su questa variante del pattern Factory Method.
Cosa ne dite?