2012-03-11 87 views
0

我有一个名为Document的类,可以通过PageImage进行扩展。对于每一个我有一个数据库中的插入方法。 PageImage的插页包含Document的插页。这是使用instanceof的情况吗?

我的疑问是,如果确定什么方法将被调用的方法是先验证类,像这样:

if (doc instanceof Document){ 
    insertDoc(doc); 
} 
if (doc instanceof Page){ 
    insertPage(doc); 
} 
if (doc instanceof Image){ 
    insertImage(doc); 
} 

或者有另一种方式,因为我总是听说使用instanceof不是一个好事情。

编辑:多态性在这种情况下不起作用,对吧?类似于insert(Document doc)insert(Page doc)insert(Image doc)

回答

8

我认为最好是在Document类中实现insert方法,并在扩展它的类中使用适当的方法覆盖它。然后,请致电doc.insert();

+0

我理解你的解决方案,但我不知道是否是最好的选择,因为我将所有图层(视图,TOs,数据,核心等)分开。如果我用这种方式,这将打破这个组织,但它是一种可行的方式。谢谢。 – 2012-03-11 14:34:39

4

如果将来您计划添加更多扩展Document类型并添加更多操作(而不是insert()),我会建议实现一个Visitor设计模式。否则,请按照Bynyamin Sharet的建议。

+0

我会更深入地研究这个解决方案,看看是否是最好的选择。谢谢。 – 2012-03-11 14:37:40

+0

我认为从架构的角度来看,这种方法更为正确。祝您好运! ;) – aviad 2012-03-11 14:40:23