装饰器模式在Java中是如何工作的?
我在试着理解装饰图案。下面是我试图理解它是如何工作的代码装饰器模式在Java中是如何工作的?,java,decorator,Java,Decorator,我在试着理解装饰图案。下面是我试图理解它是如何工作的代码 public static void main(String[] args) { Room myRoom = new CurtainDecorator(new ColorDecorator(new SimpleRoom())); System.out.println(myRoom.showRoom()); } 下面是我的具体课程 public class SimpleRoom impl
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";
}
}
下面是我的Decorator实现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";
}
}
输出为蓝色窗帘
我的问题放在评论中。最后你有:
CurtainDecorator(ref=ColorDecorator(ref=SimpleeRoom)))
当您从main调用showRoom时,它会调用CurtainDecorator的方法,该方法首先转到输出“蓝色”的引用(本例中为ColorDecorator),然后CurtainDecorator将其添加为位“窗帘”。看一看。这肯定会有帮助:-)这是坏模式的可能副本不要使用它,而是考虑如何重构它,以便在需要添加新特性时不扩展子类。