我正在读Head First Design Patterns这本书。在第3章(“装饰对象:装饰器模式”)中,我不理解这一部分:
“对于一些饮料的客户来说,最终得到的装饰器不是最外面的装饰器,这不是很容易吗?比如,如果我有一个含有摩卡、大豆和鞭子的DarkRoast,那么很容易编写代码,以某种方式以引用大豆而不是鞭子结束,这意味着它不会在订单中包括鞭子。”
有人能帮我理解这一部分的要点吗,以及作者正在解决的主要问题是什么?
发布于 2015-04-26 00:29:06
我想他们想要指出的是,如果你不小心在哪里以及如何创建装饰对象,你可能会把引用搞混。考虑一下第98页的例子(2004年的第一版)。
Beverage beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);如果你在这些创造步骤之间做一些事情,你可能最终会得到一杯没有鞭子的摩卡咖啡。
就像他们在答案部分写的那样:
然而,装饰器通常是通过使用其他模式来创建的,如工厂和构建器。
如果自动创建对象,可能会防止出现引用错误。
https://stackoverflow.com/questions/29867281
复制相似问题