Decoratore design pattern in swift

3

Sto leggendo "Testa primi modelli di design" ( qui puoi trovare l'esatto esempio citato nel libro )

Durante la progettazione di Decorator, tutto era nitido e chiaro fino a quando sono incappato in questo

stanno spiegando il decoratore usando

  1. Estensioni Non penso che estendere una classe attraverso i risultati di "Estensioni" nel modello di progettazione di un decoratore poiché non possiamo aggiungere proprietà alle classi. Come ho capito, la chiave per decoratore è la capacità di avvolgere altri oggetti infinito, questo non è possibile qui, anche se possiamo aggiungere funzionalità alla classe esistente senza ereditarla.

  2. Delegazione La delega qui è completamente fuori dal contesto. La delega non è di per sé un modello di progettazione?

posta Saqib Saud 12.01.2015 - 06:44
fonte

3 risposte

3

Penso che il libro "Head first design patterns" sia corretto.

  1. Come per Wikipedia , questo modello "consente di aggiungere un comportamento a un singolo oggetto, sia staticamente o dinamicamente, senza influenzare il comportamento di altri oggetti della stessa classe ". Le 'estensioni' aggiungono capacità a un oggetto staticamente e i comportamenti possono essere aggiunti solo aggiungendo metodi, potrebbe non aver bisogno di una nuova proprietà (questa non è una condizione obbligatoria qui). Questa domanda di stackoverflow ha trattato argomenti simili.

  2. La delega può essere considerata come un modello e può essere utilizzata per aggiungere comportamenti a un oggetto esistente come da modello decoratore. Dai un'occhiata ai seguenti link: link e link

Spero che ti sarà d'aiuto. Grazie.

    
risposta data 12.01.2015 - 08:03
fonte
1

Non puoi aggiungere proprietà memorizzate, ma puoi aggiungere proprietà calcolate . Una proprietà calcolata può agire come una proprietà memorizzata. Infatti ObjC fornisce un comodo set di chiamate per renderlo se non addirittura facile ... beh, almeno non difficile.

Le prestazioni potrebbero non essere dove vuoi tu, ma se le prestazioni sono un grosso problema lascia che il profiler ti dica quando devi rinunciare alla "purezza dell'implementazione del pattern" e spostare alcune proprietà nella classe corretta.

    
risposta data 27.03.2015 - 17:31
fonte
1

Non puoi aggiungere direttamente attributi e metodi in una classe, ma puoi farlo nel decoratore. Poiché un decoratore è una composizione del suo supertipo, puoi affermare che il decoratore è un oggetto di base, con metodi e attributi aggiuntivi. Esattamente come una sottoclasse è la sua super-classe, con metodi e attributi aggiuntivi o modificati.

Nel decoratore tipico, una parte del comportamento è semplicemente identica a ciò che è definito nell'oggetto base associato. Quindi implementa i metodi che reificano questo comportamento semplicemente chiamando lo stesso metodo nell'oggetto associato. Ecco perché puoi dire che il pattern di progettazione di Decorator può essere utilizzato come meccanismo di delega.

È relativamente comune trovare (una parte di) un modello in un altro. Ad esempio, potresti considerare il decoratore come un tipo speciale di proxy.

    
risposta data 12.01.2015 - 10:19
fonte

Leggi altre domande sui tag