Letteralmente façade significa "facciata", ed infatti nella programmazione ad oggetti indica un oggetto che permette, attraverso un'interfaccia più semplice, l'accesso a sottosistemi che espongono interfacce complesse e molto diverse tra loro, nonché a blocchi di codice complessi.

Consideriamo, ad esempio, la seguente situazione in cui una classe Client, per realizzare una singola operazione deve accedere ad alcune classi molto differenti tra loro.

L'utilizzo del pattern façade (qui realizzato attraverso la classe Facade) permette di nascondere la complessità dell'operazione, poiché in questo caso la classe Client chiama soltanto il metodo metodoUnico per realizzare la stessa operazione.

Il vantaggio è ancora più evidente se questo pattern viene utilizzato in una libreria software, poiché rende indipendente l'implementazione della classe Client dall'implementazione dei vari oggetti Class1, Class2, etc.

Nelle librerie standard Java (Java 2 Platform, Standard Edition) questo pattern viene spesso usato; considerando ad esempio tutte le classi disponibili per fare il rendering del testo o delle forme geometriche, un programmatore può ignorare tutte queste classi e utilizzare unicamente le classi façade (Font e Graphics) che offrono un'interfaccia più semplice e omogenea.

Esempio in Java

modifica

Esempio di come un client ("you") interagisca tramite un facade (il "computer") ad un sistema complesso (parti interne come CPU e HardDisk).

/* Parti complesse */

class CPU {
    public void freeze() { ... }
    public void jump(long position) { ... }
    public void execute() { ... }
}

class Memory {
    public void load(long position, byte[] data) { ... }
}

class HardDrive {
    public byte[] read(long lba, int size) { ... }
}

/* Facade */

class ComputerFacade {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public ComputerFacade() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}

Voci correlate

modifica

Altri progetti

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

📚 Artikel Terkait di Wikipedia

Ippocampo (anatomia)

associata a un distinto pattern di onde EEG e di attività di popolazione neurale. Queste modalità prendono il nome dai pattern EEG a esse associate: theta

Coerenza (linguistica)

l'attivazione ampliata, la memoria episodica e semantica, l'economia, i pattern globali e l'ereditarietà. Attivazione le espressioni linguistiche con funzione

Dimetiltriptammina

che genera pattern di percezione coerenti e complessi. Ipotesi psicologiche e cognitive: L'esperienza può essere interpretata come l'accesso, in uno stato

Ripetizione dilazionata

Xiao Zhao e Jing Liu, Spaced Learning Enhances Episodic Memory by Increasing Neural Pattern Similarity Across Repetitions, in The Journal of Neuroscience

DJMax Respect

Hard (HD). Difficoltà avanzata dei pattern. Maximum (MX). Difficoltà massimizzata dei pattern. SC. Difficoltà con pattern adattati per consentire difficoltà

Sindrome del savant

linguistici; le abilità savant deriverebbero da meccanismi di rilevamento di pattern e di completamento d'informazione applicati a materiali fortemente strutturati

Bias cognitivo

bias cognitivo (pronuncia inglese [ˈbaɪəs]) o distorsione cognitiva è un pattern sistematico di deviazione dalla norma o dalla razionalità nei processi

Spiaggia

principali elementi di morfologia costiera relativi ai sedimenti di spiaggia. Pattern di rifrazione / diffrazione e di interferenza di fronti d'onda generati