我還沒有研究設計模式,但我敢打賭,有一個我需要做的。我在幾棵樹上運行了一套不同的算法。他們都實現一個接口:尋找設計模式
public interface DistanceMetric {
public double distance(AbstractTree<String> t1, AbstractTree<String> t2);
}
public class concreteDistanceAlgorithmV1 implements DistanceMetric{
public double distance(AbstractTree<String> t1, AbstractTree<String> t2){
// algorithm methods
return distance;
}
}
但是,突然間,我現在需要爲上述每一種算法一個的兩個版本,第二個是它有預處理的第一棵樹的變化:
public interface DistanceMetricType2 {
public double distance(AbstractTree<String> t);
}
public class concreteDistanceAlgorithmV2 implements DistanceMetricType2{
private Object transformation1;
public concreteDistanceAlgorithmV2(AbstractTree<String> t1){
transformation1 = process(t1);
}
public double distance(AbstractTree<String> t2){
Object transformation2 = process(t2);
//algorithm involving both transformations
return distance;
}
}
必須有比爲每個算法創建兩個類更好的方法?這是戰略模式還是類似的用途?我如何修改我必須更好地利用好的設計原則?
備註:您的方法應該採用接口而不是抽象類(AbstractTree)。 – 2009-08-07 20:16:12
不一定,儘管這可能是一個好主意。如果他的所有樹都從AbstractTree繼承,那麼它可能會運行。 – 2009-08-07 23:58:21