我有一个名为“Operation”的抽象类,这个类有一个名为“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 的类)需要准备参数(一些需要 int,一些需要 String,一些需要更复杂的数据类型..所以它并不总是 int)
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();
}