In un progetto ho deciso di implementare il pattern Decorator.
Ho una classe Thing
con methodA()
, e una classe AbstractDecorator
che eredita da Thing
e che tutti i decoratori ereditano da: ConcreteDecorator1
, ConcreteDecorator2
, ecc. Tutti ovviamente override methodA()
per aggiungere alcune funzionalità prima di delegare al% co_de impacchettato. Implementazione usuale di Decorator.
Ho deciso di implementare un Thing
(per la mancanza di un nome migliore): riceve WrappingFactory
oggetti e li avvolge con un decoratore specificato. Alcuni decoratori richiedono un parametro nel costruttore e Thing
si occupa anche di questo. Eccolo:
public class WrappingFactory{
public static void addSomeFunctionality(Thing thing){
thing = new SomeDecorator(thing);
}
public static void addFunctionalityWithParameter(Thing thing, int param){
thing = new DecoratorWithParameter(thing, param);
}
public static void addSomeAwesomeFunctionality(Thing thing){
thing = new AwesomeDecorator(thing);
}
}
L'ho fatto ma in realtà non so perché. Questo ha dei vantaggi rispetto al fatto che il cliente istanzia direttamente i decoratori?
Se questo ha dei vantaggi, ti preghiamo di spiegarmeli.