【发布时间】:2013-10-10 15:15:09
【问题描述】:
我有一个名为“操作”的抽象类 并且这个类有一个叫做“Prepare”的抽象方法。
public abstract class Operation {
public abstract void prepare() throws Exception;
public abstract void run() throws Exception;
// other stuff here that's not abstract
public void printHelloWorld() {
System.out.println("Hello World!");
}
}
唯一的问题是一些东西是“操作”( 一些扩展 Operation 的类)需要参数来准备(一些 需要整数,有些需要字符串,有些需要更复杂的数据类型..所以它并不总是整数)
public class Teleportation extends Operation {
@Override
public void prepare(int capacityRequired ) throws Exception {
// do stuff
}
@Override
public void run() throws Exception {
}
}
我使用什么 OOP 模式来实现这一点 以及如何设置此代码?
编辑:
理想情况下,我想准备和运行这样的操作:
for (Operation operation : operations ) {
operation.prepare();
operation.run();
}
假设我使用这个解决方案:
public class Teleportation extends Operation {
private int cReq;
public void setCapacityRequired(int cReq) {
this.cReq = cReq;
}
@Override
public void prepare() throws Exception {
// I can do the preparation stuff
// since I have access to cReq here
}
@Override
public void run() throws Exception {
}
}
那么-我想知道是否可以避免这种情况:
for (Operation operation : operations ) {
if (operation.getClass().isInstanceOf(Teleporation.class)) {
((Teleporation)operation).setCapacityRequired( 5 );
}
operation.prepare();
operation.run();
}
【问题讨论】:
-
将参数传递给
Teleportation构造函数? -
你要具体一点,这里可以有n个答案。
-
我想扩展 Operation 并需要参数来准备的类并不总是需要一个 int ?
-
@Julien - 是的,你是对的 - 只是做了一个编辑来解释要准备的参数并不总是 int 并且应该是复杂的数据类型:-)
-
在我看来你的抽象类应该是一个接口,但也许是因为我没有看到整个东西^^