首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为比萨饼建模

为比萨饼建模
EN

Stack Overflow用户
提问于 2011-11-06 03:42:08
回答 2查看 424关注 0票数 2

我正在尝试创建一个订餐应用程序。它将从yet服务接收菜单数据(格式尚未确定),并将其转换为订单。

我很难弄清楚如何接近披萨-他们比其他任何东西都复杂,因为你可以选择大小,底座,配料等。

我想要有一个Product类,我可以为菜单中的每个项目创建它。然后,该产品将被赋予类大小和选项的对象。这允许创建一个披萨,设置其大小(例如,常规/大/xl)和一组配料(选项)。

不知何故,我需要让Option对象知道Product的大小。我需要这样做,因为一个普通披萨的配料可能需要5£,但同样的配料对于一个大披萨来说需要7£。理想情况下,选项不是大小的元素,因为对于每个大小,可用的选项保持不变-只有价格变化。

我的(可能是错误的)模型是这样的:http://yuml.me/diagram/scruffy/class/%5BPizza%5D-%3E%5BToppings%5D,%20%5BPizza%5D-%3E%5BSize%5D

有没有关于如何实现这一点的想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-06 03:48:34

我建议从Decorator pattern开始。

一个基本的Pizza类将有属性和方法来添加调味汁、浇头等。装饰者可以修改基本Pizza的大小。例如,ExtraLargePizza装饰器将更改大小。每个装饰者都应该公开计算披萨成本的功能。这是因为装饰器知道它自己的大小。

票数 1
EN

Stack Overflow用户

发布于 2011-11-06 03:57:01

在实际编写了处理此问题的软件后,我发现使用子项目来表示选项效果最好。本质上,允许项目有子项集合,然后这些子项可以有更多子项的集合,等等。每个选项实际上只是另一个项目(它有一个名称和一个价格),只是它与另一个项目相关。因此,在您的示例中,它可能如下所示:

代码语言:javascript
复制
Pizza (Item)
|--> Size (ItemSet)
|      |--> Large ($15) (Item)
|      |      |--> Toppings (ItemSet)
|      |             |--> Pepperoni ($7) (Item)
|      |             |--> Anchovies ($7) (Item)
|      |--> Regular ($10) (Item)
|             |--> Toppings (ItemSet)
|                    |--> Pepperoni ($4) (Item)
|                    |--> Anchovies ($4) (Item)
|--> Crust (ItemSet)
       |--> Thin (Item)
       |--> Deep-Dish (Item)

Pizza项目有一个Size项目集,其中包含2个项目(大的或常规的),每个项目都有自己的配料项目集,其中包含每个项目的配料列表,每个项目都有自己的定价。您可以为每个项目设置多个项目集(并且很可能需要它们)。我用外壳项目集展示了这一点。子项不必有自己的定价。通常,定价是累加的,所以顶层项目(披萨)通常有基本价格,然后选择的子项目在用户选择它们时将其价格添加到基本价格上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8022770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档