Adapter pattern: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
Riga 48:
* [[Decorator]]
* [[Proxy pattern]]
 
== Esempi ==
 
===PHP===
<source lang="php">
// Esempio Adapter Pattern
 
interface IFormatPresaTedesca
{
public function inserisciSpinaTedesca();
public function inviaCorrente();
}
 
interface IFormaPresaItaliana
{
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 IFormaPresaItaliana
{
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 IFormaPresaItaliana
{
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---
</source>
 
== Altri progetti ==