Java 寻找一种设计模式
我还没有研究过设计模式,但我敢打赌,我需要做的事情肯定有一个。我在几棵树上运行了一组不同的算法。它们都实现了一个接口:Java 寻找一种设计模式,java,design-patterns,oop,Java,Design Patterns,Oop,我还没有研究过设计模式,但我敢打赌,我需要做的事情肯定有一个。我在几棵树上运行了一组不同的算法。它们都实现了一个接口: public interface DistanceMetric { public double distance(AbstractTree<String> t1, AbstractTree<String> t2); } public class concreteDistanceAlgorithmV1 implements DistanceMet
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;
}
}
公共接口距离度量{
公共双距离(抽象树t1,抽象树t2);
}
公共类concreteDistanceAlgorithmV1实现了距离度量{
公共双距离(抽象树t1,抽象树t2){
//算法方法
返回距离;
}
}
然而,现在我突然需要两个版本的每个算法,一个如上所述,第二个是一个变体,它对第一棵树进行了预处理:
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{
公共双距离(t);
}
公共类concreteDistanceAlgorithmV2实现DistanceMetricType2{
私有对象转换1;
公共距离算法V2(抽象树t1){
转化1=过程(t1);
}
公共双倍距离(t2){
对象转换2=过程(t2);
//包含两种变换的算法
返回距离;
}
}
一定有比为每个算法生成两个类更好的方法吗?这是用于战略模式还是类似模式?如何修改我必须的内容以更好地利用好的设计原则?如果需要在运行时选择算法,请查看。策略模式提供了一个所有算法都实现的接口。然后,您可以实例化适当的算法并调用其execute()方法
如果需要更改算法的各个部分,请查看。在模板方法中,对算法的修改会覆盖适当的方法,以提供实现完全相同目标的替代方法。这通常是通过继承抽象类来实现的。如果需要在运行时选择算法,请查看。策略模式提供了一个所有算法都实现的接口。然后,您可以实例化适当的算法并调用其execute()方法
如果需要更改算法的各个部分,请查看。在模板方法中,对算法的修改会覆盖适当的方法,以提供实现完全相同目标的替代方法。这通常是通过继承抽象类来实现的。我认为你是对的,这是利用策略模式的好时机。我认为你是对的,这是利用策略模式的好时机。旁注:你的方法应该采用接口而不是抽象类(抽象树).不一定,尽管这可能是个好主意。如果他的所有树都继承自AbstractTree,那么它可能会成功。旁注:您的方法应该采用接口而不是抽象类(AbstractTree)。不一定,尽管这可能是个好主意。如果他的所有树都继承自AbstractTree,那么它可能会成功。