package Ġstructural Ċ Ċ import Ġjava . util .* Ċ Ċ /** Ġ" Component " Ġ*/ Ċ interface ĠGraph ic Ġ{ ĊĠĠĠ Ġfun Ġprint () Ċ } Ċ Ċ /** Ġ" Composite " Ġ*/ Ċ class ĠComposite Graphic ( val Ġgraphics : ĠArrayList < Graphic > Ġ= ĠArrayList ()) Ġ: ĠGraph ic Ġ{ ĊĊĠĠĠ Ġ// Print s Ġthe Ġgraphic . ĊĠĠĠ Ġoverride Ġfun Ġprint () Ġ= Ġgraphics . forEach ( Graphic :: print ) ĊĊĠĠĠ Ġ// Adds Ġthe Ġgraphic Ġto Ġthe Ġcomposition . ĊĠĠĠ Ġfun Ġadd ( graphic : ĠGraph ic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgraphics . add ( graphic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Remov es Ġthe Ġgraphic Ġfrom Ġthe Ġcomposition . ĊĠĠĠ Ġfun Ġremove ( graphic : ĠGraph ic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgraphics . remove ( graphic ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠEl lipse Ġ: ĠGraph ic Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprint () Ġ= Ġprintln (" Ellipse ") Ċ } Ċ Ċ class ĠSquare Ġ: ĠGraph ic Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprint () Ġ= Ġprintln (" Square ") Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġ// Initialize Ġfour Ġel lip ses ĊĠĠĠ Ġval Ġel lipse 1 Ġ= ĠEl lipse () ĊĠĠĠ Ġval Ġel lipse 2 Ġ= ĠEl lipse () ĊĠĠĠ Ġval Ġel lipse 3 Ġ= ĠEl lipse () ĊĠĠĠ Ġval Ġel lipse 4 Ġ= ĠEl lipse () ĊĊĠĠĠ Ġ// Initialize Ġfour Ġsquares ĊĠĠĠ Ġval Ġsquare 1 Ġ= ĠSquare () ĊĠĠĠ Ġval Ġsquare 2 Ġ= ĠSquare () ĊĠĠĠ Ġval Ġsquare 3 Ġ= ĠSquare () ĊĠĠĠ Ġval Ġsquare 4 Ġ= ĠSquare () ĊĊĠĠĠ Ġ// Initialize Ġthree Ġcomposite Ġgraphics ĊĠĠĠ Ġval Ġgraphic Ġ= ĠComposite Graphic () ĊĠĠĠ Ġval Ġgraphic 1 Ġ= ĠComposite Graphic () ĊĠĠĠ Ġval Ġgraphic 2 Ġ= ĠComposite Graphic () ĊĊĠĠĠ Ġ// Comp o ses Ġthe Ġgraphics ĊĠĠĠ Ġgraphic 1 . add ( ellipse 1 ) ĊĠĠĠ Ġgraphic 1 . add ( ellipse 2 ) ĊĠĠĠ Ġgraphic 1 . add ( square 1 ) ĊĠĠĠ Ġgraphic 1 . add ( ellipse 3 ) ĊĊĠĠĠ Ġgraphic 2 . add ( ellipse 4 ) ĊĠĠĠ Ġgraphic 2 . add ( square 2 ) ĊĠĠĠ Ġgraphic 2 . add ( square 3 ) ĊĠĠĠ Ġgraphic 2 . add ( square 4 ) ĊĊĠĠĠ Ġgraphic . add ( graphic 1 ) ĊĠĠĠ Ġgraphic . add ( graphic 2 ) ĊĊĠĠĠ Ġ// Print s Ġthe Ġcomplete Ġgraphic ĊĠĠĠ Ġgraphic . print () Ċ }