作为Uni项目的一部分,我首次使用装饰器模式。据我所知,这种模式似乎更多地用于以模块化方式添加功能,但是我们已经教过它使用诸如咖啡或披萨制造商之类的用途,其中对象具有添加的模块化组件 - 改变属性而不是行为。
我正在努力充分利用这两种用途,但是我想出了一个问题。在我们正在使用的书中的示例(Head First Design Patterns)中,该模式用于创建不同咖啡的咖啡店。所以,例如,牛奶,泡沫,糖,洒水都是装饰者。
您如何实现多次使用相同装饰器的系统(例如,含有两种糖的咖啡)?你会重新包装咖啡,还是给糖一些数量的财产?或者(因为我开始怀疑)这不会是一个问题,因为模式不是这样设计的吗?
答案 0 :(得分:1)
装饰者不关心给定对象装饰的方式。装饰器和给定对象都不存储有关此内容的任何信息。基本上,你想要改变装饰器的行为/状态,所以这是从装饰器内部完成的。
所以,给Sugar
quantity
一个属性。您可以通过添加一个额外参数的新构造函数来执行此操作(并让标准构造函数将quantity
默认为1
并相应地记录它。)