首页 文章

寻找设计模式

提问于
浏览
0

我没有研究过设计模式,但我愿意打赌,我需要做的就是一个 . 我正在几棵树上运行一组不同的算法 . 它们都实现了一个接口:

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;
    }
}

必须有比为每个算法制作两个类更好的方法吗?这是策略模式的用途还是类似的?如何修改我的工作以更好地利用优秀的设计原则?

2 回答

  • 0

    如果需要在运行时选择算法,请查看strategy pattern . 策略模式提供了所有算法实现的接口 . 然后,您可以实例化正确的算法并调用其execute()方法 .

    如果您需要改变算法的各个部分,请查看template method pattern . 在模板方法中,对算法的修改会覆盖适当的方法,以提供实现完全相同目标的替代方法 . 这通常通过使用继承的抽象类来完成 .

  • 3

    我认为你是对的,这是利用战略模式的好时机 .

相关问题