PATRÓN FAÇADE
Francisco J Arroyo Castrohttps://plus.google.com/+FranciscoArroyo@farroyocastro
AUTENTIA.COM
Madrid, 06 de Agosto de 2014
● GoF - Patrón estructural.
● Busca conseguir facilidad de uso y/o legibilidad.
● No añade funcionalidad.
● Conoce los subsistemas pero los subsistemas no lo conocen a él.
● Reducir acoplamiento
Descripción
Ejemplo - UML
http://it.wikipedia.org/wiki/File:Esempio_Pattern_Facade_01.jpg
Ejemplo - UML
http://it.wikipedia.org/wiki/File:Esempio_Pattern_Facade_02_1.jpg
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) { ... }}
Ejemplo - Código - Subsistemas
class Cliente { public static void main(String[] args) { CPU processor = new CPU(); Memory ram = new Memory(); HardDrive hd = new HardDrive();
start(processor, ram, hd);}
public void start(processor, ram, hd) { processor.freeze(); ram.load(BOOT_ADDRESS
, hd.read(BOOT_SECTOR, SECTOR_SIZE));processor.jump(BOOT_ADDRESS);processor.execute()
}}
Ejemplo - Código - Cliente sin Façade
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(); }}
Ejemplo - Código - Cliente con Façade
class Cliente { public static void main(String[] args) { ComputerFacade computer =
new ComputerFacade(); computer.start();
}}
● Abstrae uso de los sistemas internos
● Permite limitar la exposición de los métodos de una clase
● Añade legibilidad
● Permite modificar el sistema sin modificar los clientes
Ventajas
● Podemos enmascarar antipatrón The God.
● No tiene porqué haber una única fachada
Precauciones
¿Preguntas?
Preguntas
Gracias!