假设我有一个类,myClass有两个方法 - addOne()和addTwo().
我有另一个类,添加.该类有一个实例布尔变量oneOrTwo.此变量决定是否在myClass对象上使用addOne()或addTwo().
我已经编写了所有使用addOne()方法的代码行,并且有很多行.我不想做的是复制它们,像这样:
if (oneOrTwo)
{
// all lines of code for addOne()
}
else
{
//all lines of code for addTwo()
}
Run Code Online (Sandbox Code Playgroud)
addOne()的代码行包括很多myClass.addOne()调用(当然我已经创建了一个新对象,一切都运行得很好,但我在这里一般都是为了避免让这个不必要的大帖子).我的问题是,如果我可以这样做:
if (oneOrTwo)
addNumber() = addOne();
else
addNumber() = addTwo();
Run Code Online (Sandbox Code Playgroud)
然后,而不是使用myClass.addOne()或myClass.addTwo() ,我可以使用myClass.addNumber() .
考虑继承和策略模式.
使用一个方法addNumber()创建一个抽象超类:
public abstract class AddNumber {
public abstract void addNumber();
}
Run Code Online (Sandbox Code Playgroud)
创建两个子类,每个子类都有自己的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
}
}
Run Code Online (Sandbox Code Playgroud)
在主类中创建一个以AddNumber对象作为参数的方法:
public class MyClass() {
public void add(AddNumber addNumber) {
addNumber.addNumber();
}
// other MyClass stuff
}
Run Code Online (Sandbox Code Playgroud)
然后,如果您需要在类中添加一个,只需使用AddOne对象作为参数调用add().同样,如果需要添加两个,则使用AddTwo对象作为参数调用add().
myClass.add(new AddOne());
myClass.add(new AddTwo());
Run Code Online (Sandbox Code Playgroud)
这称为策略模式,是这类问题的通用设计解决方案.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |