我正在一个宠物项目中尝试练习(纯正?)OO,并且无法从几个类中弄清楚如何分解一个共同的行为。
public Solution improve(Solution initialSolution)
{
stopCondition.setInitialSolution(initialSolution);
Solution nextSolution = initialSolution;
do
{
nextSolution = nextSolutionGenerator.generate(nextSolution);
}
while(!stopCondition.isStopConditionReached());
return nextSolution;
}
如您所见,生成对于BinaryNextSolutionGenerator和PermutationNextSolutionGenerator都是通用的。我知道解决方案生成(Solution solution)应该在NextSolutionGenerator中,但是如果我将PermutationSolution实例发送到BinaryNextSolutionGenerator实例中,我不想在编译时丢失类型验证。 看起来我必须使用通用编程,或者我的设计从根本上是错误的(或者是一个普通的权衡?),但是我之前希望有一些有经验的意见。
顺便说一句,仅生成调用doGenerate的操作,因为我打算在其中添加一些常用的日志记录代码。
答案 0 :(得分:0)
Integer getVariable(int idx)
重构为<V extends java.lang.Number> getVariable(int idx)
Soultion
“ generator.generate”的(精确)类型... public Solution<V> generate() {...}
),强制执行所需的方法(<S extends Solution<V>> proteced abstract S doGenerate(S prev);
)AbstractGenerator
也是放置imporve
的地方(并且public generate
)方法。...
https://github.com/xerx593/soq54317950更好地解释了我的观点...还概述了improve()
和StopCondition<V extends Number, S extends Solution>
。