Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Adapter pattern - Teknopedia
Adapter pattern - Teknopedia
Niente fonti!
Questa voce o sezione sull'argomento programmazione non cita le fonti necessarie o quelle presenti sono insufficienti.

Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti.

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 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 librerie) la cui interfaccia non è perfettamente compatibile con quanto richiesto da applicazioni già esistenti. Invece di dover riscrivere parte del sistema, compito oneroso e non sempre possibile se non si ha a disposizione il codice sorgente, può essere comodo scrivere un adapter che faccia da tramite.

L'Adapter è un pattern strutturale che può essere basato sia su classi che su oggetti.

Questo design pattern è parte fondamentale della programmazione a oggetti ed è stato formalizzato per la prima volta da Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - la cosiddetta Gang of Four - nel libro Design Patterns.

Applicabilità

[modifica | modifica wikitesto]

L'uso del pattern Adapter risulta utile quando interfacce di classi differenti devono comunque poter comunicare tra loro. Alcuni casi possono includere

  • l'utilizzo di una classe esistente che presenti un'interfaccia diversa da quella desiderata;
  • la scrittura di una determinata classe senza poter conoscere a priori le altre classi con cui dovrà operare, in particolare senza poter conoscere quale specifica interfaccia sia necessario che la classe debba presentare alle altre.

Un altro contesto è quello in cui si desidera che l'invocazione di un metodo di un oggetto da parte dei client avvenga solo in maniera indiretta: il metodo "target" viene incapsulato all'interno dell'oggetto, mentre uno o più metodi "pubblici" fanno da tramite con l'esterno. Questo consente alla classe di subire modifiche future mantenendo la retrocompatibilità, oppure di implementare in un unico punto una funzionalità alla quale i client accedono tramite metodi più "comodi" da usare e con signatures differenti.

Struttura

[modifica | modifica wikitesto]
Abbozzo informaticaQuesta sezione sull'argomento informatica è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Teknopedia. Segui i suggerimenti del progetto di riferimento.

Il pattern Adapter può essere basato su classi, utilizzando l'ereditarietà multipla per adattare interfacce diverse con il meccanismo dell'ereditarietà, oppure su oggetti con la composition, ovvero includendo l’oggetto sorgente nell’implementazione dell’adapter..

Partecipanti

[modifica | modifica wikitesto]
Diagramma UML del Pattern
  • Adaptee: definisce l'interfaccia che ha bisogno di essere adattata.
  • Target: definisce l'interfaccia che usa il Client.
  • Client: collabora con gli oggetti in conformità con l'interfaccia Target.
  • Adapter: adatta l'interfaccia Adaptee all'interfaccia Target.

Esempi

[modifica | modifica wikitesto]

PHP

[modifica | modifica wikitesto]
// 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---

Voci correlate

[modifica | modifica wikitesto]
  • Design pattern
  • Bridge pattern
  • Decorator
  • Proxy pattern

Altri progetti

[modifica | modifica wikitesto]

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file sull'adapter pattern
V · D · M
Design pattern
CreazionaliAbstract factory · Builder · Factory · Prototype · Singleton
StrutturaliAdapter · Bridge · Composite · Container pattern · Decorator · Façade · Flyweight · Proxy
ComportamentaliChain-of-responsibility · Command · Interpreter · Iterator · Mediator · Memento · Observer · State · Strategy · Template method · Visitor
Pattern di concorrenzaActive object · Balking · Binding properties · Double-checked locking · Event-based asynchronous · Guarded suspension · Join · Lock · Monitor · Proactor · Reactor · Read write lock · Scheduler · Thread pool · Thread-local storage
Pattern architetturaliFront controller · Interceptor · MVC · n-tier · Specification · Publish–subscribe · Naked objects · Service locator · Active record · Identity map · Data Access Object · Data transfer object · ADR · Inversione del controllo
Altri
pattern
Blackboard · Business delegate · Composite entity · Dependency injection · Intercepting filter · Lazy loading · Mock object · Null object · Object pool · Servant · Twin · Type tunnel
LibriDesign Patterns · Enterprise Integration Patterns
PersoneChristopher Alexander · Erich Gamma · Ralph Johnson · John Vlissides · Grady Booch · Kent Beck · Ward Cunningham · Martin Fowler · Robert Martin · Jim Coplien · Douglas Schmidt · Linda Rising
ComunitàThe Hillside Group · The Portland Pattern Repository
Estratto da "https://it.wikipedia.org/w/index.php?title=Adapter_pattern&oldid=147219835"

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022