Utilisateur
Perché si basano su meccanismi comuni del linguaggio, come l'ereditarietà per i pattern basati su classi e la composizione di oggetti per i pattern basati su oggetti.
Adapter risolve le incompatibilità tra due interfacce esistenti, permettendo loro di lavorare insieme.
Bridge collega un'astrazione e le sue implementazioni, permettendo a entrambe di evolversi indipendentemente.
Adapter è necessario quando due classi incompatibili devono collaborare.
Bridge è utile quando un'astrazione deve avere diverse implementazioni, che possono evolvere separatamente.
Adapter rende due interfacce esistenti compatibili, mentre Facade definisce una nuova interfaccia per semplificare l'interazione con un insieme di oggetti.
Un Adapter riusa un'interfaccia esistente, mentre una Facade crea una nuova interfaccia per semplificare l'accesso a funzionalità complesse.
Entrambi si basano sulla composizione ricorsiva.
Decorator è un Composite degenerato o viceversa, con intenzioni diverse:
Decorator aggiunge responsabilità dinamicamente agli oggetti.
Composite rappresenta oggetti complessi trattati come un singolo oggetto.
Decorator aggiunge funzionalità dinamicamente, senza fare subclassing.
Composite organizza oggetti in una struttura gerarchica per trattarli uniformemente.
Entrambi forniscono indirezione a un oggetto, ma con scopi diversi:
Decorator aggiunge funzionalità dinamicamente all'oggetto tramite composizione ricorsiva.
Proxy agisce come un sostituto per l'oggetto, limitando o controllando l'accesso a quest'ultimo.
Decorator si preoccupa di aggiungere o rimuovere dinamicamente proprietà.
Proxy fornisce un sostituto statico per l'oggetto quando è scomodo o indesiderabile accedervi direttamente.
Proxy ha una relazione statica con l'oggetto (sostituto fisso), mentre Decorator si concentra su una composizione dinamica e ricorsiva delle funzionalità.
Decorator e Proxy sono complementari, con il Proxy che fornisce un accesso controllato all'oggetto e il Decorator che aggiunge funzionalità dinamicamente, a volte anche combinando i due approcci.