我正在阅读装饰设计图案,无法理解一些内容我有四节课public class Computer { public Computer() { } public String description() { return "computer"; } }public abstract class ComponentDecorator extends Computer{ public abstract String description();}public class Disk extends ComponentDecorator{ Computer computer; public Disk(Computer c) { computer = c; } public String description() { return computer.description() + " and a disk"; }}public class Monitor extends ComponentDecorator{ Computer computer; public Monitor(Computer c) { computer = c; } public String description() { return computer.description() + " and a monitor"; }}这是期末考试public class Test{ public static void main(String args[]) { Computer computer = new Computer(); computer = new Disk(computer); computer = new Monitor(computer); computer = new CD(computer); computer = new CD(computer); System.out.println("You're getting a " + computer.description() + "."); }}现在的最终输出是computer and a disk and a monitor and a cd让我感到困惑的是1)为什么他使用相同的对象名称计算机,为什么不使用计算机1和计算机2)如果计算机obj相同,则不意味着只有最后一个声明有效,其他声明将被覆盖我认为输出应该是computer and a CD 最佳答案 这就是装饰器模式所做的。它使用新属性“装饰”现有对象。因此,您拥有的最后一个修饰对象是CD对象,其私有成员computer的类型为Computer。但是,该computer对象是由Monitor创建的对象,该对象还具有一个称为computer的私有成员。此模式会重复进行,直到您到达原始的Computer对象为止。现在,当您调用description()时,您正在执行computer.description()以及当前类的一些文本。第一次调用一直沿整个过程进行,直到到达第一个计算机对象,该对象先打印computer,然后从and a disk对象打印Disk,然后从and a monitor对象打印Monitor,最后是来自and a CD对象。您可以每次使用一个新变量,然后将该对象传递到每个后续对象中。这取决于您要查找的内容。在这里,您只是在重用变量。这种ASCII艺术可能有助于您了解对象之间的关系。每个框中的CD指每个类的私有成员。 CD Monitor Disk Computer __________ ___________ ___________ ___________| computer-|---|->computer-|---|->computer-|---|->computer ||__________| |___________| |___________| |___________|现在,在下面的ASCII艺术中,您将看到每个“盒子”打印的内容。顶部的箭头显示了每个computer方法中return语句的执行顺序。框之间的箭头显示了每个description()方法的调用顺序 order of print <-------------------------------------------------------------------+ CD Monitor Disk Computer | | call from Main __________ _______________ ____________ __________ |----------------> | and a cd |-->| and a monitor |-->| and a disk |-->| computer |----+ |__________| |_______________| |____________| |__________|希望我糟糕的ASCII艺术有帮助:)关于java - 需要包装类模式的帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4762248/
10-10 01:08