【发布时间】:2018-08-04 01:49:22
【问题描述】:
我有一个名为 Operator 的类,它有多个子类,每个子类都有一个标识它的变量。我在另一个类中有一个方法,它根据变量返回运算符子类之一的新实例,我想知道是否有优化的方法来初始化和返回案例的特定子类依赖项。
算子类
public abstract class Operator {
private String logic;
private String formula;
public Operador(String logic, String formula) {
this.logic = logic;
this.formula = formula;
}
//Some methods
}
一些子类
连词类
public class Conjuncion extends Operador {
public Conjuncion() {
super("and", "&");
}
//Some methods
}
析取类
public class Disjunction extends Operador{
public Disjunction() {
super("or", "@");
}
//Some methods
}
在另一个类中,我有一个名为 selectOperator 的方法,如果满足某些条件,它会返回 Operator 的子类之一
private Operator selectOperator(String str) {
Operator operator = null;
switch (str) {
case "&":
operator = new Conjuncion();
break;
case "@":
operator = new Disjunction();
break;
case "-":
operator = new Negacion();
break;
//More cases
}
return operator;
}
我的问题是我可以有这样的东西吗?
for(int = i; i < numberOfSubclasses; i++){
if(str.equals(subclass.getLogic)) {
return Operator operator = new SubClass();
}
}
我是 OOP 的新手,所以这对新手来说可能会有很大帮助,如果您对我的代码中的其他任何内容有其他建议,它也会有所帮助。
顺便说一句,如果有任何变量或类名不匹配,那是因为我的代码是西班牙语,我为问题翻译了它。
【问题讨论】:
-
实际上,是的,您可以。您所要求的是
algebraic data type,或者在 OO 世界中,object algebra。 link.springer.com/chapter/10.1007%2F978-3-642-31057-7_2 。典型 OO 实践中的另一种选择是访问者模式。你可以看看两者。 -
虽然我不得不说,代数数据类型是一种与典型 OO 思维方式背道而驰的概念,而且很多 OO 程序员经常会告诉你不要这样做。
-
如果明确定义了子类的数量,使用枚举可能是个好主意。
-
所有算子都实现相同的方法吗?它们有任何可变状态吗?
-
我希望以后可以添加更多的子类,所以我不知道。
标签: java class oop inheritance polymorphism