Java-重构几乎相同的方法

Java-重构几乎相同的方法,java,design-patterns,refactoring,Java,Design Patterns,Refactoring,我有一个类似这样的方法: private void method(final Param one, final Param two) { Code Block CallToAnotherMethod() } 此方法从两个位置调用。在其中一个地方,我想按原样调用整个方法。其次,我只想执行代码块,而不想执行调用其他方法() 我应该如何重构这个?用99%的相同代码实现两个方法看起来并不优雅 提前感谢您的建议。给您 private void method(final Param on

我有一个类似这样的方法:

private void method(final Param one, final Param two) {
    Code Block
    CallToAnotherMethod() 
}
此方法从两个位置调用。在其中一个地方,我想按原样调用整个方法。其次,我只想执行
代码块
,而不想执行
调用其他方法()

我应该如何重构这个?用99%的相同代码实现两个方法看起来并不优雅

提前感谢您的建议。

给您

private void method(final Param one, final Param two) {
    codeBlockMethod() 
    CallToAnotherMethod() 
}


private void method2(final Param one, final Param two) {
    CallToAnotherMethod() 
}

private void codeBlockMethod() {
    Code Block
}
给你

private void method(final Param one, final Param two) {
    codeBlockMethod() 
    CallToAnotherMethod() 
}


private void method2(final Param one, final Param two) {
    CallToAnotherMethod() 
}

private void codeBlockMethod() {
    Code Block
}

如果对实际代码没有任何洞察,就很难正确判断它。与任何一般性问题一样,我们只能提供一般性答案

private void method(final Param one, final Param two) {
    methodForCodeBlock(one, two);
    callToAnotherMethod() 
}

private void methodForCodeBlock(final Param one, final Param two) {
    // code block here
}

private void callToAnotherMethod() {
    ...
}

要仅执行代码块,请调用
methodForCodeBlock(…)
。要执行所有操作,请调用
方法(…)

而不深入了解实际代码,很难正确判断它。与任何一般性问题一样,我们只能提供一般性答案

private void method(final Param one, final Param two) {
    methodForCodeBlock(one, two);
    callToAnotherMethod() 
}

private void methodForCodeBlock(final Param one, final Param two) {
    // code block here
}

private void callToAnotherMethod() {
    ...
}

要仅执行代码块,请调用
methodForCodeBlock(…)
。要执行所有操作,请调用
方法(…)

添加第三个参数,例如
布尔doAdditionalProcessing
,并使用该参数确定
调用其他方法()
应该执行。您可以传递另一个参数来决定要执行的代码。请将99%的代码放在它自己的方法中。不要添加确定要执行的代码的参数。这是糟糕的设计,打破了简单责任原则。@GriffeyDog“在方法的条件中使用参数”和“使用参数确定方法的逻辑”之间有区别。
boolean
参数是一个指示符号,无论它被称为
performSpecialHandling
doAdditionalProcessing
还是
fixDesignProblemWithMoreBadDesign
。添加第三个参数,例如
boolean doAdditionalProcessing
,并使用该参数确定
是否调用其他方法()
应该执行。您可以传递另一个参数来决定要执行的代码。请将99%的代码放在它自己的方法中。不要添加确定要执行的代码的参数。这是糟糕的设计,打破了简单责任原则。@GriffeyDog“在方法的条件中使用参数”和“使用参数确定方法的逻辑”之间有区别。
boolean
参数是一个指示符号,无论它被称为
performSpecialHandling
doAdditionalProcessing
还是
fixDesignProblemWithMoreBadDesign
。方法名称不一致。方法名称不一致。