TypeEnum
MATERIAL,
OPERATION,
SIGNATURE;
class AbstractModule
TypeEnum typeEnum
String name
String color
class MaterialModule extends AbstractModule
some properties unique to this module
class OperationModule extends AbstractModule
some properties unique to this module
class SignatureModule extends AbstractModule
someProperties unique to this module
在某些时候制作了很多xxxModule并将其存储在AbstractModule列表中。 然后,所有这些列表都将被迭代,并使用一个转换用例进行强制转换 将抽象模块返回到其子类并执行操作
switch (module.getTypeEnum) {
case MATERIAL:
MaterialModule materialModule = (MaterialModule) module;
//do stuff with materialModule unique property
break;
case OPERATION:
OperationModule operationModule = (OperationModule) module;
//do stuff with operationModule unique property
break;
case SIGNATURE:
SignatureModule signatureModule = (SignatureModule) module;
//do stuff with signature module unique property
break;
每个“使用模块唯一属性执行操作”都应在方法中 在每个孩子班级
那样,您可以只调用module.doModuleStuff()而不进行切换,这是不行的,因为我仍然需要为此将其强制转换回其子类。
问题是,如果将此代码放在每个子类中,我该如何调用 我的列表包含AbstractModules时正确的方法? 我的意思是没有这种typeEnum和switch的情况。
谢谢。
答案 0 :(得分:1)
您可以创建一个公共方法,该方法将使用所需的唯一属性调用私有方法。例如:
public abstract class AbsModule{
public void abstract doSomething();
}
public class Module1 implements AbsModule{
public void doSomething(){
doSomethingForModule1();
}
private void doSomethingForModule1(){
Your code here
}
}
public class Module2 implements AbsModule{
public void doSomething(){
doSomethingForModule2();
}
private void doSomethingForModule2(){
Your code here
}
}
您还可以检查可以完成工作的设计模式。