Académique Documents
Professionnel Documents
Culture Documents
Composite
Propsito
z
Motivacin
z
Solucin:
z
z
Composite
Motivacin
Grafico
pintar()
anyadir(Grafico g)
eliminar(Grafico g)
obtenerHijo(int i)
Linea
pintar()
Rectangulo
pintar()
graficos
*
Texto
pintar()
Dibujo
pintar()
anyadir(Grafico g)
eliminar(Grafico g)
obtenerHijo(int i)
Composite
Aplicabilidad
z
Composite
Estructura
Client
Component
operation()
add(Component)
remove(Component)
getChild(int)
Ejemplo de
estructura-objeto:
children
*
:aComposite
:aComposite
:aLeaf
:aComposite
:aLeaf
:aLeaf
Leaf
Composite
operation()
operation()
add(Component)
remove(Component)
getChild(int)
:aLeaf
:aLeaf
Composite
Participantes
z
Component (Grafico):
z
z
z
z
Composite (Dibujo):
z
z
z
Client:
z
Composite
Consecuencias
z
Composite
Implementacin
z
Compartir componentes
z
z
Composite
Implementacin
z
Definirlas en Composite
z
z
Composite
Implementacin
z
Composite
Cdigo de ejemplo (1)
public interface Component {
public void add (Component c);
public void remove (Component c);
public Component getChild (int i);
}
public class Leaf implements Component {
public void add (Component c)
{} // tambin puede lanzar una excepcin
public void remove (Component c) {} // tambin puede lanzar una excepcin
public Component getChild (int i) { return null; }
}
public class Composite implements Component {
private Vector _children = new Vector();
public void add (Component c)
{ _children.addElement(c); }
public void remove (Component c) { _children.removeElement(c); }
public Component getChild (int i) { return _children.elementAt(i); }
}
Composite
Cdigo de ejemplo (2)
public abstract class Component {
public void add (Component c)
{} // tambin puede lanzar una excepcin
public void remove (Component c) {} // tambin puede lanzar una excepcin
public Component getChild (int i) { return null; }
}
public class Leaf extends Component {
}
public class Composite extends Component {
private Vector _children = new Vector();
public void add (Component c)
{ _children.addElement(c); }
public void remove (Component c) { _children.removeElement(c); }
public Component getChild (int i) { return _children.elementAt(i); }
}
Composite
Cdigo de ejemplo (3)
public interface Component {
public Composite getComposite ();
}
public class Leaf implements Component {
public Composite getComposite () { return null; }
}
public class Composite implements Component {
private Vector _children = new Vector();
public void add (Component c)
{ _children.addElement(c); }
public void remove (Component c) { _children.removeElement(c); }
public Component getChild (int i) { return _children.elementAt(i); }
public Composite getComposite () { return this; }
}
// cdigo cliente
Composite aComposite = new Composite();
Leaf aLeaf = new Leaf();
Component aComponent;
aComponent = aComposite;
if (aComponent == aComponent.getComposite()) test.add(new Leaf());
aComponent = aLeaf;
if (aComponent == aComponent.getComposite()) test.add(new Leaf());
// aadir la hoja
// no aadir la hoja
Composite
En java
z
En el paquete java.awt.swing
z
Component
z Component
Composite
z Container (abstracta)
z Panel (concreta)
z Frame (concreta)
z Dialog (concreta)
Leaf:
z Label
z TextField
z Button
Composite
Ejercicio
z
4
3+8
14 * (3+5)
...