Adapter pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: fix wl, replaced: Design Patterns patterns → Design pattern |
|||
(26 versioni intermedie di 22 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|febbraio 2013}}
Con il nome '''adapter''', o '''adattatore''' si denota un ''[[design pattern]]'' utilizzato in [[informatica]] nella [[programmazione orientata agli oggetti]]. A volte viene chiamato ''wrapper'' (ovvero ''involucro'') per il [[#Struttura|suo schema di funzionamento]].
Il fine dell'''adapter'' è di fornire una soluzione astratta al problema dell'interoperabilità tra interfacce differenti. Il problema si presenta ogni qual volta nel progetto di un ''[[software]]'' si debbano utilizzare sistemi di supporto (come per esempio [[Libreria (
L'''Adapter'' è un ''pattern'' strutturale che può essere basato sia su [[Classe (informatica)|classi]] che su [[Oggetto (informatica)|oggetti]].
Questo ''design pattern'' è parte fondamentale della programmazione a oggetti ed è stato formalizzato per la prima volta da [[Erich Gamma]], [[Richard Helm]], [[Ralph Johnson (informatico)|Ralph Johnson]] e [[John Vlissides]] - la cosiddetta ''[[
==Applicabilità==
Line 16 ⟶ 17:
==Struttura==
{{S sezione|informatica}}
Il pattern ''Adapter'' può essere basato su classi, utilizzando l'[[ereditarietà (informatica)|ereditarietà]] multipla per adattare interfacce diverse con il meccanismo dell'ereditarietà, oppure
<!--
===Basata su classi===
Line 35 ⟶ 36:
==Partecipanti==
[[File:
* '''Adaptee''': definisce l'interfaccia che ha bisogno di essere adattata.
Line 41 ⟶ 42:
* '''Client''': collabora con gli oggetti in conformità con l'interfaccia Target.
* '''Adapter''': adatta l'interfaccia Adaptee all'interfaccia Target.
== Esempi ==
===PHP===
<syntaxhighlight lang="php">
// Esempio Adapter Pattern
interface IFormatPresaTedesca
{
public function inserisciSpinaTedesca();
public function inviaCorrente();
}
interface IFormatPresaItaliana
{
public function inserisciSpinaItaliana();
public function inviaCorrente();
}
// Adaptee
class LavatriceTedesca implements IFormatPresaTedesca
{
private $spinaInserita = FALSE;
private $correntePresente = FALSE;
public function inserisciSpinaTedesca()
{
$this->spinaInserita = TRUE;
echo "Spina Tedesca inserita\n";
}
public function inviaCorrente()
{
if($this->spinaInserita)
{
$this->correntePresente = TRUE;
echo "Corrente lavatrice Tedesca presente\n";
}
else
{
echo "Corrente lavatrice Tedesca non presente\n";
}
}
public function lava()
{
if($this->correntePresente)
{
echo "Lavaggio iniziato\n";
echo "Lavaggio 25%\n";
echo "Lavaggio 50%\n";
echo "Lavaggio 75%\n";
echo "Lavaggio terminato\n";
}
else
{
echo "Controllare presa\n";
}
}
}
// Adapter
class AdattatorePresaTedesca implements IFormatPresaItaliana
{
private $presa;
public function __construct(IFormatPresaTedesca $presa)
{
$this->presa = $presa;
}
public function inserisciSpinaItaliana()
{
echo "Adattatore presa Tedesca inserito\n";
$this->presa->inserisciSpinaTedesca();
}
public function inviaCorrente()
{
$this->presa->inviaCorrente();
}
public function lava()
{
$this->presa->lava();
}
}
class LavatriceItaliana implements IFormatPresaItaliana
{
private $correntePresente = FALSE;
private $spinaInserita = FALSE;
public function inserisciSpinaItaliana()
{
$this->spinaInserita = TRUE;
echo "Spina Italiana inserita\n";
}
public function inviaCorrente()
{
if($this->spinaInserita)
{
$this->correntePresente = TRUE;
echo "Corrente lavatrice Italiana presente\n";
}
else
{
echo "Corrente lavatrice Italiana non presente\n";
}
}
public function lava()
{
if($this->correntePresente)
{
echo "Lavaggio iniziato\n";
echo "Lavaggio 25%\n";
echo "Lavaggio 50%\n";
echo "Lavaggio 75%\n";
echo "Lavaggio terminato\n";
}
else
{
echo "Controllare presa\n";
}
}
}
// Client
class EseguiLavaggio
{
private $lavatrice;
private $lavatriceConAdattatore;
public function __construct()
{
echo "---Lavaggio con Lavatrice Tedesca iniziato---\n";
$this->lavatrice = new LavatriceTedesca();
$this->lavatriceConAdattatore = new AdattatorePresaTedesca($this->lavatrice);
$this->lavatriceConAdattatore->inserisciSpinaItaliana();
$this->lavatriceConAdattatore->inviaCorrente();
$this->lavatriceConAdattatore->lava();
echo "---Vestiti pronti---\n\n";
}
}
$lavaggio = new EseguiLavaggio();
//Risultato: #quanton81
//---Lavaggio con Lavatrice Tedesca iniziato---
//Adattatore presa Tedesca inserito
//Spina Tedesca inserita
//Corrente lavatrice Tedesca presente
//Lavaggio iniziato
//Lavaggio 25%
//Lavaggio 50%
//Lavaggio 75%
//Lavaggio terminato
//---Vestiti pronti---
</syntaxhighlight>
== Voci correlate ==
* [[Design pattern]]
* [[Bridge pattern
* [[Decorator]]
* [[Proxy pattern
== Altri progetti ==
{{interprogetto
{{Design pattern}}
[[Categoria:Design pattern]]
|