Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 53 di 112
  • livello avanzato
Indice lezioni

Adapter e Façade Pattern

I pattern Adapter e Façade permettono di sostituire all'interfaccia originale di un oggetto con una che risponda meglio alle necessità di un progetto.
I pattern Adapter e Façade permettono di sostituire all'interfaccia originale di un oggetto con una che risponda meglio alle necessità di un progetto.
Link copiato negli appunti

I pattern Adapter e Façade permettono di sostituire all'interfaccia originale di un oggetto, un'interfaccia che risponda meglio alle necessità di un progetto.

Adapter Pattern

In determinate situazioni si può avere la necessità di sostituire un oggetto con un altro che offre le medesime funzionalità ma ha migliori prestazioni o comunque lo preferiamo all'originale.

In questi casi è molto difficile che il nuovo oggetto offra gli stessi nomi per i metodi e le proprietà del vecchio. Per integrare il nuovo oggetto nella nostra applicazione dovremmo andare a modificare tutte le chiamate al vecchio oggetto per renderle compatibili con il nuovo.

In alternativa possiamo adottare l'Adapter Pattern che prevede la creazione di un nuovo oggetto che fa da tramite fra la vecchia e la nuova modalità di invocazione di metodi ed oggetti.

Supponiamo, ad esempio, che il vecchio oggetto da sostituire abbia la seguente struttura:

var vecchioObj = function() {
	this.metodo = function (x) { //... };
};

e venga utilizzato nella nostra applicazione nel seguente modo:

var obj = new vecchioObj(); obj.metodo(123);

Ora immaginiamo che il nuovo oggetto abbia questa struttura:

var nuovoObj = function() {
	this.nuovoMetodo = function(x) { //... };
};

Per evitare di dover sostituire dappertutto la creazione del nuovo oggetto e la chiamata a metodo() con la chiamata a nuovoMetodo(), creiamo un adapter come il seguente:

var vecchioObj = function() {
	var myObj = new nuovoObj();
	this.metodo = myObj.nuovoMetodo;
};

Abbiamo ridefinito l'oggetto dismesso utilizzando al suo interno il nuovo oggetto. In particolare abbiamo mappato il vecchio metodo al nuovo in modo che l'utilizzo del nuovo oggetto risulti del tutto trasparente al resto dell'applicazione.

Naturalmente questo è un esempio semplice per spiegare i principi del pattern, ma in situazioni più complesse l'Adapter Pattern può darci una mano ad evitare di riscrivere buona parte del codice esistente.

Façade Pattern

Il pattern Façade ha l'obiettivo di fornire un'interfaccia di alto livello per una funzionalità, nascondendo la complessità sottostante.

Supponiamo ad esempio che per effettuare una certa elaborazione bisogna coinvolgere diversi oggetti invocando determinati metodi e controllando i rispettivi esiti. Adottando il Pattern Façade costruiremo un metodo di semplice invocazione che si occupa di svolgere la parte complessa coordinando gli oggetti coinvolti.

Nel seguente esempio di codice:

var cilindro = function() {
	this.calcolaArea = function(raggio, altezza) {
		var areaBase = cerchio.calcolaArea(raggio);
		var circonferenzaBase = cerchio.calcolaCirconferenza(raggio);
		var areaLaterale = rettangolo.calcolaarea( circonferenzaBase, altezza);
		return (areaBase * 2) + areaLaterale;
	};
}

abbiamo definito il costruttore di un oggetto cilindro che prevede un metodo per calcolare l'area della sua superficie. In pratica, il metodo calcolaArea() espone un approccio semplificato al calcolo dell'area del solido, accollandosi il compito di fare i calcoli coinvolgendo altri oggetti, cerchio e rettangolo nel caso specifico.

In linea di massima, quindi, il Façade Pattern propone una semplificazione nell'interazione con attività complesse o laboriose.


Ti consigliamo anche