2012-01-16 50 views
1

Java設計問題。專門的方法與使用Enum作爲附加參數

我有一個對象需要維護說4種類型的小部件的集合:活動,無效,無效,潛力。對於這些類型的,我有一系列的方法作用於每個:都說添加,獲取,刪除等

我的問題是,這將是最好有這樣一系列的方法:

addInactive(Widget) 
getInactive() 
removeInactive(Widget) 
addActive(Widget) 
getInactive() 
removeInactive(Widget) 
addInvalid(Widget) 

等等

OR

我應該有這個類,而不是內部的枚舉:WidgetStatus然後消費者將通過在此枚舉時,他們需要執行的操作。這將導致只有3公有方法代替:

add(Widget, WidgetStatus) 
get(WidgetStatus) 
remove(Widget, WidgetStatus) 

一方面,我喜歡先用專門的方法,因爲它不僅保留下來的必要參數的數量,但它也迫使消費者的手顯式調用他們需要的方法。然而,後一種選擇似乎使API簡單化,並且使未來更容易添加其他狀態類型。

想法?

回答

1

隨着枚舉,如果你想改變狀態你會得到一個更簡潔的API,更易於維護將是不錯的;第一種方法確實沒有什麼好的理由。

+0

我採用這種方法。我認爲它包含了手頭的要求,並使API更簡單。感謝大家的意見。 – sma 2012-01-16 18:48:57

0

我會將枚舉或任何東西變成包含上面提到的行爲的策略模式。然後,您的add/get/remove方法將簡單地委託給執行該操作的策略。

http://en.wikipedia.org/wiki/Strategy_pattern

+0

我也想到了,但我認爲戰略模式可能會引入不必要的複雜性。添加/刪除等基本上只是將條目放入/刪除條目。戰略模式在這裏似乎過火了。 – sma 2012-01-16 16:01:02

1

WidgetStatus是窗口小部件的屬性,而不是一個容器。可能遵循你

Widget.setActive(false); 
add(Widget); 
+0

+1不會構建瑞士軍刀 - 容器不應該知道任何關於窗口小部件API的更多信息(比如它們具有「狀態」) – Bohemian 2012-01-16 15:37:37

+0

我同意你的意見,但實際上Widget本身沒有'狀態'。這是一種記憶的東西。無效的,有效的等等是在運行時根據用戶操作決定的。所以,這種方式不太可行。 – sma 2012-01-16 15:48:48