我有以下的策略模式實現:使用工廠創建一個策略
public abstract class RetrievalStrategy {
public abstract List<MyObject> retrieve();
}
public class LimitRetrievalStrategy extends RetrievalStrategy {
public int limit;
public LimitRetrievalStrategy(int limit) {
this.limit = limit;
}
public List<MyObject> retrieve() {
// fill up the list and return it, limiting to 'limit' results
return new ArrayList<MyObject>(limit);
}
}
public class SpeedRetrievalStrategy extends RetrievalStrategy {
public int speed;
public SpeedRetrievalStrategy(int speed) {
this.speed = speed;
}
public List<MyObject> retrieve() {
// do something with the speed and return list again
return new ArrayList<MyObject>();
}
}
我的客戶端應用程序接收無論是速度還是從用戶的限制(可能還有其它參數)。我想創建一個工廠類,它將返回基於具有值的參數和不具有參數的適當策略。我不希望客戶決定應該返回哪個策略。如果工廠createStrategy(params)
方法對每個參數都有if
語句,並且取決於不同的組合(假設還有其他策略類),那麼返回具體策略類? 這樣做的正確方法是什麼?
這就是我會做的。你有什麼疑問? – 2012-03-25 16:31:04
很難延伸。 – 2012-03-25 16:34:30
TBH,這聽起來像是一個非OO維護的噩夢,讓工廠使用「is-parameter-set」啓發式來猜測使用哪種策略。如果你最終得到兩個使用完全相同參數的策略呢?您將無法使用此工廠設計。 – 2012-03-25 16:38:18