2013-04-25 44 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