Domanda modello decoratore principianti

0

Mi sono imbattuto in questo articolo: link

Dopo averlo letto, ho un po 'di difficoltà nel comprendere un concetto. Se osservi la sezione Struttura in quell'articolo quando mostra il diagramma di classe UML, sono confuso sul motivo per cui la classe Wrapper di opzioni estende la Interfaccia ma la classe Wrapper di opzioni ha un'istanza (composizione) dell'interfaccia pure. Perché sono necessarie entrambe queste relazioni per realizzare ciò che il Pattern Decorator spera di fare? In altre parole, perché nessuna delle due relazioni è sufficientemente buona per se stessa?

    
posta dhint4 26.03.2015 - 02:47
fonte

2 risposte

5

I decoratori di solito aumentano la funzionalità originale in qualche modo, non la sostituiscono del tutto. Quindi hanno bisogno di tenere un riferimento all'oggetto originale. Ad esempio, un decoratore che aggiunge la memoizzazione a una funzione dovrà essere in grado di chiamare la funzione originale se il suo risultato non è stato trovato nella cache.

Tuttavia, il codice chiamante non dovrebbe aver bisogno di sapere se sta funzionando con una classe decorata o con la classe originale. Ciò significa che il decoratore deve implementare la stessa interfaccia di ciò che decora.

    
risposta data 26.03.2015 - 04:06
fonte
2

Pensa a un decoratore che ha 2 funzioni:

  • aggiunge / modifica la funzionalità della classe originale. Per fare ciò, è necessario avere un riferimento alla classe originale, e quindi avere bisogno di composizione.
  • hanno lo stesso aspetto della classe originale per il client. Guardando lo stesso, intendo dal punto di vista del cliente, non lo sapranno e non hanno bisogno di sapere quale classe è decoratore, quale classe è la classe originale. Per avere lo stesso aspetto, deve offrire lo stesso insieme di funzionalità pubbliche dello stesso contratto come la classe originale. Ecco perché ha bisogno di ereditarietà
risposta data 26.03.2015 - 08:30
fonte

Leggi altre domande sui tag