segunda-feira, 12 de março de 2012

Façade

Façade
Origem: Wikipédia, a enciclopédia livre.




Em padrões de projeto de software, um façade (fachada em francês) é um objeto que disponibiliza uma interface simplificada para uma das funcionalidades de uma API, por exemplo. Um façade pode:
tornar uma biblioteca de software mais fácil de entender e usar;
tornar o código que utiliza esta biblioteca mais fácil de entender;
reduzir as dependências em relação às características internas de uma biblioteca, trazendo flexibilidade no desenvolvimento do sistema;
envolver uma interface mal desenhada, com uma interface melhor definida.

Um façade é um padrão de projeto (design pattern) do tipo estrutural. Os façades são muito comuns em projeto orientados a objeto. Por exemplo, a biblioteca padrão da linguagem Java contém dúzias de classes para processamento do arquivo fonte de um caractere, geração do seu desenho geométrico e dos pixels que formam este caractere. Entretanto, a maioria dos programadores Java não se preocupam com esses detalhes, pois a biblioteca contém as classes do tipo façade (Font e Graphics) que oferecem métodos simples para as operações relacionadas com fontes.
[editar]Estrutura



Client1, Client2

Usuários da API

Façade

Define uma interface para os packages 1, 2 e 3, isolando-os do resto da aplicação.

O wikilivro Computer Science Design Patterns tem uma página sobreImplementação de façade em diversas linguagens

Esse é um exemplo abstrato de como um cliente ("você") interage com um façade (o "computador") para um sistema complexo (as partes internas do computador como o processador e o disco rígido).

/* Complex parts */
 
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 Computer {
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;
 
    public Computer() {
        this.cpu = new CPU();
        this.memory = new Memory();
        this.hardDrive = new HardDrive();
    }
 
    public void startComputer() {
        cpu.freeze();
        memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
        cpu.jump(BOOT_ADDRESS);
        cpu.execute();
    }
}
 
/* Client */
 
class You {
    public static void main(String[] args) {
        Computer facade = new Computer();
 facade.startComputer();
    }
}







Tudo que tivermos no projeto irá ser passado pela fachada que também tem o singleton.
Na fachada chamamos os controladores.

Postado por: Argemiro Júnior, ADS - 6º Período.

Um comentário: