Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有更好的OOP方法来嵌套策略模式?_Oop_Design Patterns - Fatal编程技术网

有没有更好的OOP方法来嵌套策略模式?

有没有更好的OOP方法来嵌套策略模式?,oop,design-patterns,Oop,Design Patterns,有没有更好的OOP方法来嵌套策略模式 我有一个遗传算法,我希望能够在运行时独立地选择适应度算法和适应度函数。适应度算法将通过合成使用适应度函数。目前,我使用策略模式和工厂方法(SPFM)来选择使用的算法,然后使用另一个SPFM来选择算法使用的适应度函数 适应度算法 public interface I_Fitness { //Accessors public Population orderByFitness(Population population); } public c

有没有更好的OOP方法来嵌套策略模式

我有一个遗传算法,我希望能够在运行时独立地选择适应度算法和适应度函数。适应度算法将通过合成使用适应度函数。目前,我使用策略模式和工厂方法(SPFM)来选择使用的算法,然后使用另一个SPFM来选择算法使用的适应度函数

适应度算法

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) {
        ...
    }
}

算法和函数之间的组合排列是什么?此外,您当前的设计是错误的,因为您将工厂用作隐藏依赖关系的服务定位器。算法和函数之间的组合排列是什么?此外,您当前的设计是错误的,因为您使用工厂作为服务定位器,从而隐藏了依赖关系。