装饰器模式,Head First 设计模式

标签 decorator

我正在阅读 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/

相关文章:

python - 在调用 Django 模型保存/删除后调用函数

python - (python)在函数中使用装饰器进行彩色打印

类级别变量上的 Python 装饰器作为反射的元数据?

python - 在 Python 中装饰每个实例的方法

python - 如何轻松处理 python 中的动态装饰器?

python - django装饰器中访问请求用户和url参数

python - 如何在装饰器中捕获异常但允许调用者也捕获它?

Python 装饰器接受任意数量的函数作为参数并返回函数的组合

javascript - 带有 babel 的装饰器,意想不到的 token

python - 如何访问装饰器属性?