有没有更好的OOP方法来嵌套策略模式?
有没有更好的OOP方法来嵌套策略模式 我有一个遗传算法,我希望能够在运行时独立地选择适应度算法和适应度函数。适应度算法将通过合成使用适应度函数。目前,我使用策略模式和工厂方法(SPFM)来选择使用的算法,然后使用另一个SPFM来选择算法使用的适应度函数 适应度算法有没有更好的OOP方法来嵌套策略模式?,oop,design-patterns,Oop,Design Patterns,有没有更好的OOP方法来嵌套策略模式 我有一个遗传算法,我希望能够在运行时独立地选择适应度算法和适应度函数。适应度算法将通过合成使用适应度函数。目前,我使用策略模式和工厂方法(SPFM)来选择使用的算法,然后使用另一个SPFM来选择算法使用的适应度函数 适应度算法 public interface I_Fitness { //Accessors public Population orderByFitness(Population population); } public c
public interface I_Fitness {
//Accessors
public Population orderByFitness(Population population);
}
public class FitnessFactory {
public static I_Fitness fitnessAlgorithmFactory(String fitnessType){
if(fitnessType.equalsIgnoreCase("cumulative")){return new FitnessCumulative();}
if(fitnessType.equalsIgnoreCase("weighted")){return new FitnessWeighted();}
return null;
}
}
public class FitnessCumulative implements I_Fitness {
@Override
public Population orderByFitness(Population population) {
I_FitnessFunctions fitnessFunctions = fitnessFunctionFactory(fitnessFunctionType);
...
}
}
public class FitnessWeighted implements I_Fitness {
@Override
public Population orderByFitness(Population population) {
I_FitnessFunctions fitnessFunctions = fitnessFunctionFactory(fitnessFunctionType);
...
}
}
适应度函数
public interface I_FitnessFunctions {
//Accessors
public Double[] getFitness(Chromosome chromosome);
}
public class FitnessFunctionsFactory {
public static I_FitnessFunctions fitnessFunctionsFactory(String fitnessFunctionType){
if(fitnessFunctionType.equalsIgnoreCase("FitnessFunctions1")){return new fitnessFunctions1();}
if(fitnessFunctionType.equalsIgnoreCase("FitnessFunctions2")){return new fitnessFunctions2();}
return null;
}
}
public class fitnessFunctions1 implements I_FitnessFunctions {
@Override
public Double getFitness(Chromosome chromosome) {
...
}
}
public class fitnessFunctions2 implements I_FitnessFunctions {
@Override
public Double getFitness(Chromosome chromosome) {
...
}
}
算法和函数之间的组合排列是什么?此外,您当前的设计是错误的,因为您将工厂用作隐藏依赖关系的服务定位器。算法和函数之间的组合排列是什么?此外,您当前的设计是错误的,因为您使用工厂作为服务定位器,从而隐藏了依赖关系。