package Ġdecorator Ċ Ċ /** Ċ Ġ* Ġ@ author Ġr ana ad ity a Ċ Ġ* Ċ Ġ* ĠDecor ator ĠDesign ĠPattern Ġallows Ġto Ġdynamically Ġadd Ġfunctionality Ċ Ġ* Ġand Ġbehaviour Ġto Ġan Ġobject Ġwithout Ġaffect ing Ġthe Ġbehaviour Ġof Ġother Ċ Ġ* Ġobjects Ġin Ġthe Ġsame Ġclass Ċ Ġ*/ Ċ interface ĠShape Ġ{ ĊĠĠĠ Ġfun Ġdraw () ĊĠĠĠ Ġfun Ġresize () ĊĠĠĠ Ġfun Ġdescription (): ĠString Ċ } Ċ Ċ public Ġopen Ġclass ĠCircle Ġ: ĠShape Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Drawing ĠCircle ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresize () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Res izing Ġthe ĠCircle ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescription (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" This Ġis Ġa ĠCircle " ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġopen Ġclass ĠRectangle Ġ: ĠShape Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Drawing ĠRectangle ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresize () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Res izing Ġthe ĠRectangle ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescription (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" This Ġis Ġa ĠRectangle " ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġabstract Ġclass ĠShape Decorator ( decorator : ĠShape ) Ġ: ĠShape Ġ{ ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġdecorator Shape : ĠShape ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . decorator Shape Ġ= Ġdecorator ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġenum Ġclass ĠColor Ġ{ ĊĠĠĠ ĠRED , ĊĠĠĠ ĠGREEN , ĊĠĠĠ ĠBL UE , ĊĠĠĠ ĠY ELLOW , ĊĠĠĠ ĠWH ITE , ĊĠĠĠ ĠBLACK , ĊĠĠĠ ĠOR ANGE , ĊĠĠĠ ĠM AR O ON Ċ } Ċ Ċ public Ġenum Ġclass ĠLine Style Ġ{ ĊĠĠĠ ĠSOL ID , ĊĠĠĠ ĠD ASH , ĊĠĠĠ ĠDOT Ċ } Ċ Ċ public Ġopen Ġclass ĠFill Color Decorator ( decor ated Shape : ĠShape , Ġcolor : ĠColor ) Ġ: ĠShape Decorator ( decor ated Shape ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor : ĠColor ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġdecorator Shape . draw () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresize () Ġ{ ĊĠĠĠĠĠĠĠ Ġdecorator Shape . resize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescription (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecorator Shape . description () Ġ+ Ġ" filled Ġwith Ġ$ color Ġcolor " ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġopen Ġclass ĠLine Color Decorator ( decorator Shape : ĠShape , Ġcolor : ĠColor ) Ġ: ĠShape Decorator ( decorator Shape ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor : ĠColor ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġdecorator Shape . draw () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresize () Ġ{ ĊĠĠĠĠĠĠĠ Ġdecorator Shape . resize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescription (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecorator Shape . description () Ġ+ Ġ" draw n Ġwith Ġ$ color Ġline Ġcolor " ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĊĠĠĠ Ġprintln (" Creating Ġsimple Ġshapes Ġ: Ġ") ĊĠĠĠ Ġval Ġrectangle : ĠShape Ġ= ĠRectangle () ĊĠĠĠ Ġval Ġcircle : ĠShape Ġ= ĠCircle () ĊĊĠĠĠ Ġrectangle . draw () ĊĠĠĠ Ġcircle . draw () ĊĊĠĠĠ Ġprintln (" Creating Ġdecor ated Ġshapes Ġ: Ġ") ĊĊĠĠĠ Ġval Ġdecor ated Circle : ĠShape Ġ= ĠFill Color Decorator ( Line Color Decorator ( Circle (), ĠColor . RED ), ĠColor . RED ) ĊĠĠĠ Ġdecor ated Circle . draw () Ċ Ċ }