我正在阅读 Head First Design Patterns书。在第3章(“装饰对象:装饰器模式”)中,我不明白这部分:
“对于某些人来说这不是很容易吗? 饮料的客户最终得到的 不是最外面的装饰器 装饰师?就像我有一个深色烤肉 摩卡、大 bean 和鞭子,这很容易 编写以某种方式结束的代码 引用大 bean 而不是鞭子, 这意味着它不会包括鞭子 订单。”
有人可以帮助我理解本节的要点以及作者要解决的主要问题是什么吗?
最佳答案
我认为他们想指出的是,如果您不小心在何处以及如何创建装饰对象,则可能会混淆引用。考虑第 98 页的示例(2004 年第一版)。
Beverage beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
如果您在这些创作步骤之间做一些事情,您最终可能会得到没有鞭子的摩卡咖啡。
就像他们在答案部分所写的那样:
However, decorators are typically created by using other patterns like Factory and Builder.
如果您自动创建对象,可能会防止出现引用错误。
关于装饰器模式,Head First 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867281/