0

我试图理解装饰器模式。下面是我试图理解它是如何工作的代码。

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

    }

下面是我的具体课程

public class SimpleRoom implements Room{

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

下面是我的抽象装饰器类

public abstract class RoomDecorator implements Room{

    public Room roomReference;

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

下面是我的装饰器实现1

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";
    }
}

下面是我的装饰器实现 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";
}

}

输出是 - BlueCurtain

我的问题放在评论中..

4

1 回答 1

1

最后你有: CurtainDecorator(ref=ColorDecorator(ref=SimpleRoom)))

当您从 main 调用 showRoom 时,它会调用 CurtainDecorator 的方法,该方法首先转到输出“Blue”的引用(在本例中为 ColorDecorator),然后 CurtainDecorator 添加它的位“Curtain”。

于 2013-10-27T17:13:45.873 回答