user2488578
user2488578

Reputation: 916

How does Decorator pattern work in Java?

I was trying to understand Decorator Pattern. Below is the code am trying to understand how it works.

public static void main(String[] args)
    {
        Room myRoom =  new CurtainDecorator(new ColorDecorator(new SimpleRoom()));
        System.out.println(myRoom.showRoom());

    }

Below is my Concrete Class

public class SimpleRoom implements Room{

    @Override
    public String showRoom()
    {
        return "show room";
    }
}

Below is my abstract Decorator class

public abstract class RoomDecorator implements Room{

    public Room roomReference;

    @Override
    public String showRoom()
    {
        return roomReference.showRoom();
    }
}

Below is my Decorator implementation1

public class ColorDecorator extends RoomDecorator{

    @Override
    public String showRoom()
    {
        return  addColors(); //How does showRoom() method gets invoked here?
    }

    public ColorDecorator(Room room)
    {
        this.roomReference = room;
    }

    public String addColors()
    {
        return  "Blue";
    }
}

Below is my Decorator implementation 2

public class CurtainDecorator extends RoomDecorator{


    public CurtainDecorator(Room room)
    {
        this.roomReference = room;
    }

    @Override
    public String showRoom()
    {
        return this.roomReference.showRoom() + addCurtains();  //What will showRoom method invoke?
    }


public String addCurtains()
{
    return "Curtain";
}

}

Output is - BlueCurtain

My question are placed in the comment..

Upvotes: 0

Views: 648

Answers (1)

v010dya
v010dya

Reputation: 5858

In the end you have: CurtainDecorator(ref=ColorDecorator(ref=SimpleRoom)))

When you call showRoom from main, it calls the method of CurtainDecorator, which in turn first goes to it's reference (ColorDecorator in this case) that outputs 'Blue', then CurtainDecorator adds it's bit 'Curtain'.

Upvotes: 1

Related Questions