【发布时间】:2013-01-25 16:51:30
【问题描述】:
我正在阅读这篇文章:
http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImplementingplusDecoratorp
我正在考虑在学校项目中实施这种模式。这不是一个要求,所以我可以半途而废。但是,我只是认为这将是一个扩展我的知识和专业知识的好机会。
学校的项目是这样的:创建一个披萨订购应用程序,员工可以在其中输入客户的订单。所以一个披萨,它可以有任意数量的配料。
上面的文章(以及 Head First: Design Patterns 一书中的描述)似乎与我的应用程序完美匹配。
这是我的问题:这似乎不是一个好的模式,原因如下:
每当“披萨店”在他们的菜单中添加新的配料时......他们将不得不添加一个全新的类,并重新编译他们的订购系统并重新分配它们?
我认为问题可能在于我在谷歌上搜索的所有示例都必须处理食物和某种配料。
- 我是否只是为这种模式找到了错误类型的示例?
- 有哪些更好的例子可以实现这种模式?
- 食品行业是其中之一吗,这只是实施 搞砸了?
- 这是已经存在但在实际生产代码中几乎没有使用过的模式之一吗?
【问题讨论】:
-
是的,这是一个很好的应用程序,可以扩展您与装饰器模式有关的知识和专业知识。不,如果您要实现一个实际的商业比萨订购应用程序,您会希望它更多地由数据驱动,而不是由代码驱动,并与您的网站挂钩(反之亦然),以便从菜单中添加/删除配料“实时”(支持挂单,例如下周生日派对的订单,现在已经过时了蔬菜培根浇头)。
-
@franji1 我怎样才能使这个更加数据驱动?我正在考虑一个“浇头”装饰器,而不是每个浇头的单独类,然后根据需要从数据库中创建浇头。但我觉得这会是某种反模式
-
想一个列出当天所有浇头的文本文件。序列化您的 MenuTopping 对象。阅读该文件并将其显示为 MenuTopping 对象的列表,但这没有使用装饰器模式。但是,我喜欢lazybereovsky 的回答,因为它允许您添加 IPizza 的其他实现,这与数据驱动的实现一样好(如果不是更好的话)。