importjava.util.List;importjava.util.ArrayList;/** "Component" */interfaceGraphic{//Prints the graphic.publicvoidprint();}/** "Composite" */classCompositeGraphicimplementsGraphic{//Collection of child graphics.privateList<Graphic>mChildGraphics=newArrayList<Graphic>();//Prints the graphic.publicvoidprint(){for(Graphicgraphic:mChildGraphics){graphic.print();}}//Adds the graphic to the composition.publicvoidadd(Graphicgraphic){mChildGraphics.add(graphic);}//Removes the graphic from the composition.publicvoidremove(Graphicgraphic){mChildGraphics.remove(graphic);}}/** "Leaf" */classEllipseimplementsGraphic{//Prints the graphic.publicvoidprint(){System.out.println("Ellipse");}}/** Client */publicclassProgram{publicstaticvoidmain(String[]args){//Initialize four ellipsesEllipseellipse1=newEllipse();Ellipseellipse2=newEllipse();Ellipseellipse3=newEllipse();Ellipseellipse4=newEllipse();//Initialize three composite graphicsCompositeGraphicgraphic=newCompositeGraphic();CompositeGraphicgraphic1=newCompositeGraphic();CompositeGraphicgraphic2=newCompositeGraphic();//Composes the graphicsgraphic1.add(ellipse1);graphic1.add(ellipse2);graphic1.add(ellipse3);graphic2.add(ellipse4);graphic.add(graphic1);graphic.add(graphic2);//Prints the complete graphic (four times the string "Ellipse").graphic.print();}}