调理使用哪种方法

Conditioning which method to use

假设我有一个 class、myClass,它有两个方法 - addOne()addTwo().

我还有一个class,正在添加。这个 class 有一个实例布尔变量,oneOrTwo。此变量决定是否在 myClass 对象上使用 addOne()addTwo()

我已经写完了所有使用addOne()方法的代码行,还有很多行。我不想做的是复制它们,像这样:

if (oneOrTwo)
{
// all lines of code for addOne()
}
else
{
//all lines of code for addTwo()
}

addOne() 的代码行包括很多 myClass.addOne() 调用(当然我有创建了一个新对象并且一切正常,但我在这里一般来说是为了避免使它变得不必要的大 post)。 我的问题是我是否可以做类似的事情:

if (oneOrTwo)
    addNumber() = addOne();
else
    addNumber() = addTwo();

然后,我可以使用 myClass.addOne()myClass.addTwo(),而不是使用myClass.addNumber().

您可以在 myClass 中有一个名为 add(boolean One) 的方法,例如:

public double add(boolean one) {
    return (one) ? addOne() : addTwo();
}

您可以通过以下方式调用该方法:

myClass.add(adding.oneOrTwo);

(如果字段 oneOrTwo 是私有的,您可能需要相关的 getter 方法。)

这就是三元运算符的用途:

addNumber = oneOrTwo? addOne : addTwo;

考虑继承和策略模式。

使用一种方法创建一个抽象超级class,addNumber():

public abstract class AddNumber {

public abstract void addNumber(); 

}

创建两个子classes,每个都有自己的 addNumber() 实现:

public class AddOne extends AddNumber {

@Override
public void addNumber() {
// code to add one
}

}

public class AddTwo extends AddNumber {

@Override
public void addNumber() {
// code to add two
}

}

在您的主 class 中创建一个方法,该方法将 AddNumber 对象作为参数:

public class MyClass() {

public void add(AddNumber addNumber) {
addNumber.addNumber(); 
}

// other MyClass stuff

}

然后,如果您需要将一个添加到您的 class,您只需使用 AddOne 对象作为参数调用 add()。同样,如果您需要添加两个,则可以使用 AddTwo 对象作为参数调用 add()。

myClass.add(new AddOne()); 
myClass.add(new AddTwo());

这称为策略模式,是针对此类问题的常见设计解决方案。