调理使用哪种方法
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());
这称为策略模式,是针对此类问题的常见设计解决方案。
假设我有一个 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());
这称为策略模式,是针对此类问题的常见设计解决方案。