public String makeDosa();
class PlainDosa implements Dosa
abstract class DosaDecorator implements Dosa
public DosaDecorator( Dosa dosa )
class MasalaDosa extends DosaDecorator
public MasalaDosa( Dosa dosa )
return dosa.makeDosa() + addMasala();
private String addMasala()
class OnionDosa extends DosaDecorator
public OnionDosa( Dosa dosa )
return dosa.makeDosa() + addOnion();
private String addOnion()
class MysoreDosa extends DosaDecorator
public MysoreDosa( Dosa dosa )
return dosa.makeDosa() + addMysoreMasala();
private String addMysoreMasala()
return ",Mysore Masala added";
public class DecoratorDesignPattern {
public static void main( String args[] )
PlainDosa plainDosaObj = new PlainDosa();
String plainDosa = plainDosaObj.makeDosa();
System.out.println(plainDosa);
String onionDosa = new OnionDosa(plainDosaObj).makeDosa();
System.out.println("\n'" + onionDosa + "' using OnionDosa");
String masalaDosa = new MasalaDosa(plainDosaObj).makeDosa();
System.out.println("\n'" + masalaDosa + "' using MasalaDosa");
String mysoreDosa = new MysoreDosa(plainDosaObj).makeDosa();
System.out.println("\n'" + mysoreDosa + "' using MysoreDosa");