【发布时间】:2020-02-28 08:08:51
【问题描述】:
我是设计软件的新手,我正在尝试构建一个类似结构的树。
我有一个这样的空界面:
interface Node{
}
NodeA 和NodeB 两个类实现了这个接口,并且都有一些特定的属性。除了这些是节点之外,它们没有任何共同点。
class A implements Node {
public String a;
public A(String a){
this.a = a;
}
}
class B implements Node {
public int a = 5;
public String z = "xyz";
public B(int a,String z){
this.a = a;
this.z = z;
}
}
我有一个class Parse,它根据特定条件创建上述类的实例。
class Parse {
List<Boolean> l;
private static int i=0;
Parse(List<Boolean> l){
this.l = l;
}
private Node parseA() {
return new A(/* param */); // Assume some parameters here
}
private Node parseB() {
return new B(/* param */); // Assume some parameters here
}
private boolean getNextState(){
return l.get(i++);
}
public Node parse(){
boolean x = getNextState();
if(x){
return parseA();
}
else{
return parseB();
}
}
}
驱动类:
public class Test {
public static void main(String[] args) {
List<Boolean> l = Arrays.asList(true,false); // so on...
Parse p = new Parse(l);
Node b = p.parse(); // not sure if its NodeA or NodeB
}
}
构建树之后,我打算使用访问者模式来检索一些属性并进行一些操作。
所以最后,当我得到一个
Node b,我想访问它的属性(NodeA或NodeB),我知道这不能完成,因为多态性没有 那样工作。
我认为使用 instanceof 阶梯和类型转换不是正确的解决方案。
抱歉这个愚蠢的问题,但是对于设计来说是新手,我不知道下一步该做什么。
如何解决这个设计问题?任何人都可以为此分享一个小的设计结构,假设这个结构会变得更大并且有足够的不同节点。 [可能是Java Generics这里的帮助]
注意:改变上面的设计很好,但如果可能的话,一个小的示例代码表示赞赏。
【问题讨论】:
标签: java design-patterns software-design