1: import java.util.ArrayList;
2:
3: /** "Component" */
4: interface Graphic {
5:
6: //Prints the graphic.
7: public void print();
8: }
9:
10: /** "Composite" */
11: class CompositeGraphic implements Graphic {
12:
13: //Collection of child graphics.
14: private List<Graphic> mChildGraphics = new ArrayList<Graphic>();
15:
16: //Prints the graphic.
17: public void print() {
18: for (Graphic graphic : mChildGraphics) {
19: graphic.print();
20: }
21: }
22:
23: //Adds the graphic to the composition.
24: public void add(Graphic graphic) {
25: mChildGraphics.add(graphic);
26: }
27:
28: //Removes the graphic from the composition.
29: public void remove(Graphic graphic) {
30: mChildGraphics.remove(graphic);
31: }
32: }
33:
34: /** "Leaf" */
35: class Ellipse implements Graphic {
36:
37: //Prints the graphic.
38: public void print() {
39: System.out.println("Ellipse");
40: }
41: }
42:
43: /** Client */
44: public class Program {
45:
46: public static void main(String[] args) {
47: //Initialize four ellipses
48: Ellipse ellipse1 = new Ellipse();
49: Ellipse ellipse2 = new Ellipse();
50: Ellipse ellipse3 = new Ellipse();
51: Ellipse ellipse4 = new Ellipse();
52:
53: //Initialize three composite graphics
54: CompositeGraphic graphic = new CompositeGraphic();
55: CompositeGraphic graphic1 = new CompositeGraphic();
56: CompositeGraphic graphic2 = new CompositeGraphic();
57:
58: //Composes the graphics
59: graphic1.add(ellipse1);
60: graphic1.add(ellipse2);
61: graphic1.add(ellipse3);
62:
63: graphic2.add(ellipse4);
64:
65: graphic.add(graphic1);
66: graphic.add(graphic2);
67:
68: //Prints the complete graphic (four times the string "Ellipse").
69: graphic.print();
70: }
71: }