4

几个小时后我有一个考试,我正在尝试为它解决示例问题。我找不到以下问题的解决方案。

画出对应以下情况的类图:

杂货店(例如超市)出售物品。有两种类型的物品:可食用的(即任何可用作食物的物品)和不可食用的。有些物品是按重量出售的,有些是按单位出售的。有些项目是应税的,而有些则不是。有些商品在成组出售时有特价(例如,2 件 3 美元)。一次购买可能包含许多物品。

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

此外,您的设计应尽可能 灵活。特别需要注意以下几点:

1) 一个项目要么可食用,要么不可食用,这一事实在项目的生命周期内不会改变,而定价策略可能会在项目的生命周期内改变。

2) 每个定价策略都与一组特定的操作相关联。例如,对于征税策略,无论项目是否应税,我们可能有一个计算税金的操作(此函数可以返回 0 对于非应税项目)

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

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

我尝试了类似的方法,认为它可能适合策略设计模式,但我完全不确定。

在此处输入图像描述

4

1 回答 1

2

首先是一家商店,可以是杂货店。任何商店都有两种类型的对象:物品和购买。如果没有物品和/或购买,商店将不复存在。商品将在没有商店的情况下存在(例如,它们必须交付到商店),但购买属于商店本身。这就是为什么 store 和 item 之间存在聚合关系,而 store 和 purchase 之间存在组合关系的原因。

物品有一些特征,如名称、可食用、应税、重量和单位。我没有实现一个项目的所有特征,但想法就在那里。有很多方法可以出售这些物品。可能同时使用更多策略。为这种情况设计了装饰器模式。它可以在运行时动态添加多种策略。它在装饰物品-界面,因为它与物品相关联,因为销售方式的变化在物品中找到了原因。它与班级购买有关联,但不是购买的一部分。将出售的每件商品都属于特定的购买。它也可以有尚未出售的状态。这就是为什么购买的多重性是 0-1。总而言之,归结为:

商店中出售的物品的类图

于 2013-05-28T22:37:27.883 回答