gpt4 book ai didi

java - 我们可以在抽象装饰器中将装饰对象的实例设为私有(private)而不是保护吗?

转载 作者:行者123 更新时间:2023-11-30 07:45:40 24 4
gpt4 key购买 nike

我注意到大多数示例对正在装饰的实例使用 protected。我也可以使用 private 吗?

public abstract class CoffeeDecorator implements Coffee {
protected Coffee decoratedCoffee;

public CoffeeDecorator(Coffee c) {
this.decoratedCoffee = c;
}
// ...
}

最佳答案

装饰器模式用作继承的替代方案,有助于添加类的附加功能,而无需修改或扩展它本身。

我会用 private 属性而不是 abstract 类来装饰它。在一个非常简单的示例中进行演示:

CupOfCoffee.java

final class CupOfCoffee implements Coffee {

public final String prepareCoffee() {
return "Coffee";
}
}

糖咖啡.java

final class SugarCoffee implements Coffee {

private final Coffee coffee;

public SugarCoffee(final Coffee coffee) {
this.coffee = coffee;
}

public final String prepareCoffee() {
return coffee.prepareCoffee() + " with sugar";
}
}

牛奶咖啡.java

final class MilkCoffee implements Coffee {

private final Coffee coffee;

public MilkCoffee(final Coffee coffee) {
this.coffee = coffee;
}

public final String prepareCoffee() {
return coffee.prepareCoffee() + " with milk";
}
}

使用可组合垂直装饰器的演示:

new MilkCoffee(
new SugarCoffee(
new SugarCoffee(
new Coffee()
)
)
).prepareCoffee() // Coffee with sugar with sugar with milk

关于java - 我们可以在抽象装饰器中将装饰对象的实例设为私有(private)而不是保护吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539124/

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