SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
Patrones de Diseño (Facade e Iterator)
Facade
El patrón facade es de tipo estructural y sirve para presentar un interfaz unificada que
representa un set de subinterfaces. Según el sitio web dofactory.com la frecuencia de uso
de este patrón es alta.
Sus principales ventajas son
Hacer que una librería de software sea mas fácil de utilizar ya que el facade tiene
métodos útiles para tareas generales
Envolver una colección de API´s diseñada de una forma en un solo API bien
diseñado.
Para modificar las clases de los subsistemas solo se cambia la fachada
Ejemplo 1
Ejemplo 2
Ejemplo de implementación
/* Partes específicas */
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) { ... }
}
/* Fachada */
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();
}
}
Iterator
El patrón de comportamiento iterator provee una interfaz para acceder secuencialmente a un
grupo de objetos de una colección.
Algunas de las funciones más comunes definidas en un iterator son Primero(), Siguiente(),
hayMas(), elementoActual().
Este patrón permite recorrer una estructura de datos sin que sea necesario conocer la estructura
interna de la misma, además de permitir crear métodos personalizados para manejar la lista.
Ejemplo 1
Ejemplo de implementación
1: Crear interfaces.
Iterator.java
public interface Iterator {
public boolean hasNext();
public Object next();
}
Container.java
public interface Container {
public Iterator getIterator();
}
2: Crear clase concreta implementando la interfaz contenedor. Esta clase
tiene la clase interna NameIterator implementando la interfaz Iterator.
NameRepository.java
public class NameRepository implements Container {
public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
3: Usar el NameRepository para conseguir el iterator e imprimir los
nombres.
IteratorPatternDemo.java
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator();
iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
4: Verificar la salida
Name : Robert
Name : John
Name : Julie
Name : Lora

Mais conteúdo relacionado

Mais procurados (7)

Veronica lopez
Veronica lopezVeronica lopez
Veronica lopez
 
Constructores
ConstructoresConstructores
Constructores
 
Comunicaciones en Java
Comunicaciones en JavaComunicaciones en Java
Comunicaciones en Java
 
Networking
NetworkingNetworking
Networking
 
Diapositivas objeto statement
Diapositivas objeto statementDiapositivas objeto statement
Diapositivas objeto statement
 
Presentación1
Presentación1Presentación1
Presentación1
 
Free mind juan perez galarcio
Free mind juan perez galarcioFree mind juan perez galarcio
Free mind juan perez galarcio
 

Destaque

Cadena de responsabilidad.chaine of responsability
Cadena de responsabilidad.chaine of responsabilityCadena de responsabilidad.chaine of responsability
Cadena de responsabilidad.chaine of responsabilityUTCH
 
Facade - Design Pattern - GoF
Facade - Design Pattern - GoFFacade - Design Pattern - GoF
Facade - Design Pattern - GoFjlrvpuma
 
Ccna3 cap8 (1)
Ccna3 cap8 (1)Ccna3 cap8 (1)
Ccna3 cap8 (1)José Mora
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño IIjjegonzalezf
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño IIkaolong
 
Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)Fanny Ruiz
 
Patrones bridge puente
Patrones bridge puentePatrones bridge puente
Patrones bridge puenteMario Cabrera
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoFYaskelly Yedra
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 

Destaque (10)

Cadena de responsabilidad.chaine of responsability
Cadena de responsabilidad.chaine of responsabilityCadena de responsabilidad.chaine of responsability
Cadena de responsabilidad.chaine of responsability
 
Facade - Design Pattern - GoF
Facade - Design Pattern - GoFFacade - Design Pattern - GoF
Facade - Design Pattern - GoF
 
Ccna3 cap8 (1)
Ccna3 cap8 (1)Ccna3 cap8 (1)
Ccna3 cap8 (1)
 
Decorator
DecoratorDecorator
Decorator
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)Diseño de Patrones (Fachada)
Diseño de Patrones (Fachada)
 
Patrones bridge puente
Patrones bridge puentePatrones bridge puente
Patrones bridge puente
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 

Semelhante a Patrones de diseño de software facade e iterator

Semelhante a Patrones de diseño de software facade e iterator (20)

Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
C# oop
C#   oopC#   oop
C# oop
 
MANUAL DE C#
MANUAL DE C#MANUAL DE C#
MANUAL DE C#
 
MANUAL 2
MANUAL 2MANUAL 2
MANUAL 2
 
C# oop
C#   oopC#   oop
C# oop
 
C# oop
C#   oopC#   oop
C# oop
 
manual de c# (1)
manual de c# (1)manual de c# (1)
manual de c# (1)
 
Modulo6.ppt
Modulo6.pptModulo6.ppt
Modulo6.ppt
 
Tarea_Investigacion programacion .pdf
Tarea_Investigacion programacion .pdfTarea_Investigacion programacion .pdf
Tarea_Investigacion programacion .pdf
 
Conceptos estructuras de datos
Conceptos estructuras de datosConceptos estructuras de datos
Conceptos estructuras de datos
 
Ant tutorial
Ant tutorialAnt tutorial
Ant tutorial
 
Hibernate 3.2 short manual
Hibernate 3.2 short manualHibernate 3.2 short manual
Hibernate 3.2 short manual
 
Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
 
manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
05 jsp tags
05 jsp tags05 jsp tags
05 jsp tags
 
Vb Net U1 Pdf
Vb Net U1 PdfVb Net U1 Pdf
Vb Net U1 Pdf
 

Patrones de diseño de software facade e iterator

  • 1. Patrones de Diseño (Facade e Iterator) Facade El patrón facade es de tipo estructural y sirve para presentar un interfaz unificada que representa un set de subinterfaces. Según el sitio web dofactory.com la frecuencia de uso de este patrón es alta. Sus principales ventajas son Hacer que una librería de software sea mas fácil de utilizar ya que el facade tiene métodos útiles para tareas generales Envolver una colección de API´s diseñada de una forma en un solo API bien diseñado. Para modificar las clases de los subsistemas solo se cambia la fachada Ejemplo 1
  • 2. Ejemplo 2 Ejemplo de implementación /* Partes específicas */ 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) { ... } }
  • 3. /* Fachada */ 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(); } }
  • 4. Iterator El patrón de comportamiento iterator provee una interfaz para acceder secuencialmente a un grupo de objetos de una colección. Algunas de las funciones más comunes definidas en un iterator son Primero(), Siguiente(), hayMas(), elementoActual(). Este patrón permite recorrer una estructura de datos sin que sea necesario conocer la estructura interna de la misma, además de permitir crear métodos personalizados para manejar la lista. Ejemplo 1
  • 5. Ejemplo de implementación 1: Crear interfaces. Iterator.java public interface Iterator { public boolean hasNext(); public Object next(); } Container.java public interface Container { public Iterator getIterator(); } 2: Crear clase concreta implementando la interfaz contenedor. Esta clase tiene la clase interna NameIterator implementando la interfaz Iterator. NameRepository.java public class NameRepository implements Container { public String names[] = {"Robert" , "John" ,"Julie" , "Lora"}; @Override public Iterator getIterator() { return new NameIterator(); } private class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if(index < names.length){ return true; } return false; } @Override public Object next() { if(this.hasNext()){ return names[index++]; } return null; } } }
  • 6. 3: Usar el NameRepository para conseguir el iterator e imprimir los nombres. IteratorPatternDemo.java public class IteratorPatternDemo { public static void main(String[] args) { NameRepository namesRepository = new NameRepository(); for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){ String name = (String)iter.next(); System.out.println("Name : " + name); } } } 4: Verificar la salida Name : Robert Name : John Name : Julie Name : Lora