gpt4 book ai didi

java - Decorator模式链式方法如何调用?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:03 27 4
gpt4 key购买 nike

我读了一个装饰器设计模式的例子。我知道这种设计模式动态地修改了一个特定实例的行为。我在下面给出的例子也是可以理解的。我不明白的一点是,当我在牛奶对象上调用 c.getCost() 时,它返回 1.5。只有 SimplecoffeegetCost() 返回 1,但是牛奶上的 c.getCost 从哪里返回 1.5?

谁能解释一下 Milk 类和 Simplecoffee 类之间的联系,以及 getCost() 方法在调用时的执行流程与牛奶对象? getCost() 方法如何返回 1.5?

//Decorator Design Pattern
interface Coffee {
public double getCost();

public String getIngredients();
}

class Simplecoffee implements Coffee {
public double getCost() {
return 1;
}

public String getIngredients() {
return "Coffee";
}
}

abstract class CoffeeDecorator implements Coffee {
protected Coffee decoratedcoffee;
protected String ingredientseparator = ":";

public CoffeeDecorator(Coffee decoratedcoffee) {

this.decoratedcoffee = decoratedcoffee;
}

public double getCost() {
return decoratedcoffee.getCost();
}

public String getIngredients() {
return decoratedcoffee.getIngredients();
}
}

class Milk extends CoffeeDecorator {

public Milk(Coffee decoratedcoffee) {

super(decoratedcoffee);
System.out.println("Milk Constructor");
}

public double getCost() {
return super.getCost() + 0.5;
}

public String getIngredients() {
return super.getIngredients() + ingredientseparator + "milk";
}
}

public class Decorator {
public static void main(String[] ar) {
System.out.println("calling simplecoffee in main");
Coffee c = new Simplecoffee();
System.out.println("Cost:" + c.getCost());
c = new Milk(c);
System.out.println("Cost:" + c.getCost());
}
}

最佳答案

How the getCost() method returns 1.5 ?

Milk 中的getCost() 方法首先调用decoratedcoffeegetCost 方法,这是对简单咖啡。因此,这将调用 SimpleCoffee 中的 getCost 方法,该方法返回 1(读取:运行时多态性)。接下来,Milk 中的 getCost 方法将此调用的返回值(即 1)添加到 0.5,从而为您提供 1.5

这就是Decorator 模式的重点。 Decorator 用于通过将新对象包装到现有链中来创建方法调用链。

关于java - Decorator模式链式方法如何调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42207081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com