「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();
}