Victor Manuel Ramirez
public interface Componente {
public void operacion();
public String toHtml();
}
public class Composite implements Componente{
private ArrayList hojas;
private String nombre, r;
public Composite(){
hojas = new ArrayList<>();
}
public void add(Componente c){
hojas.add(c);
}
public void delete(Componente c){}
public Componente getC(int n){
return hojas.get(n);
}
@Override
public void operacion(){
hojas.forEach(hoja -> {
hoja.operacion();
});
}
@Override
public String toHtml(){
r="\n";
hojas.forEach(hoja->{
r+= "- "+hoja.toHtml()+"
\n";
});
r+="
\n";
return r;
}
}
public class Hoja implements Componente{
private String nombre;
private String extencion;
public Hoja(String nombre){
this.nombre=nombre;
this.extencion=".html";
}
@Override
public void operacion(){
System.out.println(this.nombre);
}
@Override
public String toHtml(){
return this.nombre+this.extencion;
}
}
public class CompositeMain {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Composite z = new Composite();
z.add(new Hoja("A"));
z.add(new Hoja("B"));
z.add(new Composite());
((Composite) (z.getC(2))).add(new Hoja("D"));
((Composite) (z.getC(2))).add(new Hoja("E"));
((Composite) (z.getC(2))).add(new Composite());
((Composite) (((Composite) (z.getC(2))).getC(2))).add(new Hoja("J"));
((Composite) (((Composite) (z.getC(2))).getC(2))).add(new Hoja("K"));
z.add(new Hoja("C"));
z.add(new Composite());
((Composite) (z.getC(4))).add(new Hoja("F"));
((Composite) (z.getC(4))).add(new Hoja("G"));
((Composite) (z.getC(4))).add(new Hoja("H"));
((Composite) (z.getC(4))).add(new Hoja("I"));
//z.operacion();
System.out.println(z.toHtml());
}
}
El diseño composite se utiliza para poder trabajar como si tuviéramos un árbol de instancias, las cuales pueden tener características y a su vez tener más objetos como si fueran hijos o ramas, nos ayuda mucho para poder tener un método y este a su vez actúe de forma recursiva sobre todo el árbol que tengamos, así evitamos hacerlo de manera “manual” sobre cada instancia que se cree, ya que tendríamos que acceder a todos los instancias y aplicar la función o método que necesitemos. En el ejemplo podemos ver que tenemos la interfaz Componente, la cual declara las funciones que tiene cada instancia del árbol y que las clases Hoja y Composite implementan estas funciones de manera independiente. La clase Composite tiene un arreglo de Componente, que son los que actúan como ramas u hojas dependiendo de como se va construyendo, además cuenta con las funciones add, delete y getC, que nos ayudan a agregar, eliminar y obtener un elemento en concreto. La clase Hoja tiene sus propios datos, pero también implementa los métodos de la interfaz Componente. En el ejemplo se utiliza para crear elementos HTML, cuando se llama la función toHtml(), las ramas regresan listas ordenadas
- y cada hoja regresa un elemento
Comments (0)