2013-04-25 48 views
3

我在几个小时内参加了一次考试,并且正在尝试为它解决示例问题。我无法找到解决以下问题的解决方案。策略模式的UML类图

绘制对应于以下情况的类图:

甲杂货店(例如一个超市)出售的项目。有两种类型的食物:食用 (即任何可以用作食物的食物)和不可食用的食物。有些产品按重量销售, ,有些产品按单位销售。有些项目是应税的,有些则不是。有些项目 以小组形式出售时有特价(例如,2美元为3美元)。购买可能包含许多 项目。

在类图中,只显示类/抽象类/接口,关联 和多重性的关联。不包括任何操作!在设计中清楚地指出接口和抽象类(如果有的话) 。

此外,您的设计应尽可能为 flexible。特别是,你需要 要注意以下几点:

1)项或者是食用与否,这一事实的 项目的生命周期内不会改变,而定价策略可以在有效期内发生变化的项目。

2)每个定价策略与一组特定的操作相关联。例如, 的税收策略,一个项目是否是纳税,我们可能有一个计算税收的操作 虽然集(该功能可用于非应税项目则返回0)

3)定价策略的操作保持不变,这些操作的处理方式可能随时间而改变。例如,我们计算可食用和非可食用物品税的方法可能会随时间而有所不同。

4)虽然定价策略的操作集在不同的 项目中保持不变,但我们可能希望以不同的方式针对不同的 项目实施这些操作。例如,我们可能想要为橙子和苹果计算税额。

我想是这样的想法,它可能适合于战略设计模式,但我不知道的。

enter image description here

+0

有这个问题还是相关的,你也可以关闭的问题?我认为很多观看这个问题的人质疑你需要得到答案吗?向你提出这个问题并不意味着我会回答这个问题。我的主要动机是另一个好奇心:你的考试怎么样? – 2013-05-27 22:07:18

+0

这不是那么糟糕,我得到了80/100。对于这个问题,实际上我仍然不知道确切的答案。 – 2013-05-27 22:12:13

+0

祝贺你的考试!如果你仍然想要一个答案,那么你可能会改变这个问题。这可能有帮助。 – 2013-05-27 22:45:57

回答

2

首先是有一个商店,其可以是杂货店。任何商店都有两种类型的物品:物品和购物。没有物品和/或购买,商店就会停止存在。没有商店的物品将存在(例如它们必须交付给商店),但购买物品属于商店本身。这就是为什么商店和商品之间存在一种整体关系,而商店和购买之间却存在着构成关系。

项目有一些特点,如姓名,食用,征税,重量和单位。我没有实现一个项目的所有特征,但是这个想法就在那里。有很多方法可以销售这些物品。可能会有更多的策略同时使用。对于这种情况是设计的装饰者模式。它可以在运行时动态添加多个策略。 它正在装饰物品接口,因为它与物品相关联,因为销售方式的变化在物品中找到其原因。它与类购买有关,但它不是购买的一部分。每件将出售的物品都属于特定的购买。它也可能有该州尚未售出。这就是为什么购买的多样性是0-1。所有的一切归结下来到这一点:

class diagram of items sold in a store

+0

sellItem和Item之间是否存在抽象? – 2013-05-30 07:31:04

+0

是的,Decorator模式的要点是SellItem仍然可以作为Item接口调用,但Item接口作为成员,并且返回该物品价格的函数将返回装饰的item变量。它同时继承和包含Item。在Wikipedia中查看此图:http://en.wikipedia.org/wiki/Decorator_pattern。我没有在图表中包含遏制关系,但我已经包含了变量item:Item,它以更简洁的方式描述了相同的原则。 – 2013-05-30 07:44:16