Nelle lingue con tipizzazione statica non è possibile aggiungere metodi a un oggetto in fase di esecuzione. Compilatore, quando incontra una dichiarazione come: car.nitroAccelerate(), controlla se un oggetto auto implementa qualsiasi interfaccia che abbia il metodo nitroAccelerate. Se si potessero aggiungere (o rimuovere) i metodi durante il runtime tali verifiche sarebbero impossibili.
I linguaggi dinamici consentono di aggiungere metodi durante il runtime. Ma questo ha un inconveniente, quando inserisci car.nitroAccelerate() nel codice, devi analizzare attentamente se l'oggetto auto in questo punto ha un tale metodo.
È possibile utilizzare decorator per modificare i metodi esistenti in fase di esecuzione, ma, in tal modo, non si modifica un oggetto esistente, ma solo uno nuovo che avvolge quello esistente.
Quindi, se si fa qualcosa di simile:
Car fasterCar = new CarWithNitro(car);
e qualche pezzo del codice detiene ancora un riferimento alla vettura originale, questa vettura originale non sarebbe più veloce, perché l'atto di avvolgimento non modifica il originale.
fonte
2012-11-20 20:08:17
Amo il motivo Decoratore. – Neowizard
Ma possiamo aggiungere nuovi stati o comportamenti in fase di esecuzione utilizzando il pattern Decorator. –
Il motivo decorativo consiste nell'aggiunta di funzionalità avvolgendo l'oggetto e esponendo un'interfaccia estesa. Questa nuova implementazione della funzionalità stessa potrebbe utilizzare strumenti e tecniche aggiuntivi, come modelli di progettazione aggiuntivi. Ricorda, il modello di progettazione non è una sostituzione per il tuo codice, è uno strumento che dovrebbe essere usato quando appropriato. – SomeWittyUsername