假设我有一个类 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()。
答案 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}}