调节使用哪种方法

时间:2015-09-04 11:39:23

标签: java bluej

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

我有另一个班级,添加。该类有一个实例布尔变量, oneOrTwo 。此变量决定是否在 myClass 对象上使用 addOne() addTwo()

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

$('#jobsTable tbody').on( 'click', 'tr', function () {
  $(this).toggleClass('selected');
  alert( $('#jobsTable tbody tr.selected').length + ' row(s) selected' );
});

addOne()的代码行包括很多 myClass.addOne()调用(当然我创建了一个新对象,一切都很完美,但是我一般都在这里说话,以避免把它变成一个不必要的大帖子。 我的问题是,我是否可以这样做:

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

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

3 个答案:

答案 0 :(得分:5)

考虑继承和策略模式。

使用一个方法addNumber():

创建一个抽象超类
public abstract class AddNumber {

public abstract void addNumber(); 

}

创建两个子类,每个子类都有自己的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
}

}

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

public class MyClass() {

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

// other MyClass stuff

}

然后,如果您需要在类中添加一个,则只需使用AddOne对象作为参数调用add()。同样,如果您需要添加两个,则使用AddTwo对象作为参数调用add()。

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

这称为策略模式,是这类问题的通用设计解决方案。

答案 1 :(得分:3)

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

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

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

myClass.add(adding.oneOrTwo);

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

答案 2 :(得分:1)

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

{{1}}