我認爲以下可能非常適合策略模式,但我不確定這是否正確,如果是這樣,如何正確實施。代碼異味 - 哪種設計模式以及如何實現?
我有一個方法,將接受一個類別和一個排序。目前Category和Sort是枚舉,所以像這樣:
public enum Category{
Hot,
New
}
public enum Sort{
New,
Rising,
ThisWeek
}
public String getUrl(Category category, Sort sort){
validateCategorySortCombo(category, sort);
}
注意validateCategorySortCombo(Category,Sort)。首先,我必須驗證類別+排序的組合 ,因爲有些是無效的。例如:
if(Category == "Hot" && Sort == "Rising"){
ThrowInvalidCategorySortCombo("Can't use hot category with rising sort")
}
將會有幾個這些檢查以確保組合是有效的。這看起來像是一種代碼味道,因爲隨着其他類別和排序的介紹,我將不得不打開這個類並修改它打破/關閉原則。
當我必須檢查Category和Sort來構造我的Url並傳回時,第二個代碼會出現異味。目前我使用了一系列switch語句:
String url;
switch(category){
case Hot:
url += "www.site.com/hot/";
case New:
url += "www.site.com/new/";
}
switch(sort){
case New:
url += "?sort=rising";
case ThisYear:
url += "?sort=thisyear";
}
再次,新的類別和種類的介紹,我會打開這個類,並更新switch語句。
幾個問題:
- 什麼樣的設計模式將被用來解決我的問題?
- 我將如何去實施設計模式?