我最近学习了很多关于设计模式的知识,特别是依赖注入。我很确定抽象工厂是实例化具有依赖关系的对象的好方法。但是我不确定如何告诉低级对象他们应该使用哪些工厂。
考虑以下简化示例:
我有一个类 MainProgram (我只是为了表示我的程序中还有其他代码......)在运行时的某个时刻,我想用抽象工厂实例化 IGeneticAlgorithm:
public class MainProgram{
private AbstractGeneticAlgorithm geneticAlgorithm;
private IGeneticAlgorithmFactory geneticAlgorithmFactory;
public MainProgram(IGeneticAlgorithmFactory geneticAlgorithmFactory){
this.geneticAlgorithmFactory = geneticAlgorithmFactory;
}
private void makeGeneticAlgorithm(){
geneticAlgorithm = geneticAlgorithmFactory.getInstance();
}
public static void main(String[] args){
MainProgram mainProgramm = new MainProgram(new FastGeneticAlgorithmFactory());
//...
}
}
public interface IGeneticAlgorithmFactory{
public IGeneticAlgorithm getInstance();
}
public class FastGeneticAlgorithmFactory implements IGeneticAlgorithmFactory{
public IGeneticAlgorithm getInstance(){
return new FastGeneticAlgorithm();
}
}
public abstract class AbstractGeneticAlgorithm{
private IIndividual individual;
private IIndividualFactory individualFactory;
private void makeIndividual(){
individual = individualFactory.getInstance();
}
//...
}
在运行时的某个时刻,我想在我的 GeneticAlgorithm 中实例化一个 IIndividual。IIndividual 不能在启动时实例化。能够在运行时实例化 IIndividual 的需要来自遗传算法的工作方式,基本上在选择-重组-变异的每个步骤之后,必须实例化新的个体。(有关更多信息,请参阅https://en.wikipedia.org/wiki/Genetic_algorithm)。我选择在这里只给 AbstractGeneticAlgorithm 一个 IIndividual 以保持这个例子简单。
public class FastGeneticAlgorithm implements AbstractGeneticAlgorithm{
private IIndividual individual;
private IIndividualFactory individualFactory;
}
使 SmallIndividualFactory 成为 FastGeneticAlgorithm 中的静态变量在我看来并不是好的做法。并将 SmallIndividualFactory 传递给 Main,以便 Main 可以将其传递给 FastGeneticAlgorithm 似乎也不正确。
我的问题是如何解决这个问题?谢谢你。
哈士奇WWW
相关分类