假设我有一个类,myClass有两个方法 - addOne()和addTwo().
我有另一个类,添加.该类有一个实例布尔变量oneOrTwo.此变量决定是否在myClass对象上使用addOne()或addTwo().
我已经编写了所有使用addOne()方法的代码行,并且有很多行.我不想做的是复制它们,像这样:
if (oneOrTwo) { // all lines of code for addOne() } else { //all lines of code for addTwo() }
addOne()的代码行包括很多myClass.addOne()调用(当然我已经创建了一个新对象,一切都运行得很好,但我在这里一般都是为了避免让这个不必要的大帖子).我的问题是,如果我可以这样做:
if (oneOrTwo) addNumber() = addOne(); else addNumber() = addTwo();
然后,而不是使用myClass.addOne()或myClass.addTwo() ,我可以使用myClass.addNumber() .
考虑继承和策略模式.
使用一个方法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());
这称为策略模式,是这类问题的通用设计解决方案.