2009-06-01 76 views
0

對於每種產品都有相關的成本計算器,如:折扣,商家折扣,商戶獎金,每月折扣等。將來會增加更多成本計算器。成本裝飾者

我們有一個具體的產品類和許多裝飾每個成本計算。所有產品都應該使用所有的計算器,因爲計算器決定根據產品的屬性(如產品商戶編號,類別編號,顏色等)來應用計算。

而且,我們的系統中有數百萬種產品需要計算。所以,我們更好地緩存裝飾的計算器。因爲在運行時裝飾每個產品實體會很昂貴。但這很難用裝飾模式。在我們的情況下,使用這種模式似乎是一種氣味。

你有什麼建議?我們是否應該使用裝飾者,策略或責任鏈模式?或者沒有模式。

回答

0

所有產品應該使用所有 計算器,因爲 決定計算器由 運用他們的計算同類產品 商戶ID,類別編號,顏色等產品的性質

如果您需要讓所有產品都使用所有的裝飾器,那麼你並沒有真正從這種模式中獲得任何好處。這是否意味着如果你實現一個新的裝飾器,所有現有的實體必須更新以使用新的裝飾器?

裝飾者應該僅在必要時應用於產品,並且只應使用那些需要的裝飾者。

我想你應該刪除裝飾者的決定;還有些東西應該決定是否應用裝飾器,在這種情況下,它會將產品包裝在適當的裝飾器中。這樣你就知道如果一個產品被包裝在一個裝飾器中,那個裝飾器正在影響(影響?)產品。

+0

裝飾者根據產品屬性進行計算,我們循環產品列表以將這些計算應用於所有產品。因此,在每次迭代中對這些產品進行裝飾時,我們認爲緩存計算邏輯將是一個好主意。但是這很難做裝飾者。所以,更好的方法是使用戰略模式作爲集合/獲取產品。 產品p =新產品(); p.setCalculationStrategy(listOfCalculators); p.price(); //將調用所有計算器,只有感興趣的計算器會計算 – 2009-06-01 11:54:00

+0

p.price(){ return listOfCalculators.price(); } listOfCalculators.price(){ 每個計算器做{ // .... } 返回價格; } – 2009-06-01 11:55:13

3

在戰略模式中,對象的意圖發生變化。

因此,我認爲策略將是一個不錯的選擇。