我有一个名为Document
的课程,可以Page
或Image
进行扩展。对于每一个我在数据库中有一个插入方法。 Page
和Image
的插入内容包含Document
的插入内容。
我怀疑的是,确定调用哪种方法的方法是首先验证类,如下所示:
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)
。
答案 0 :(得分:8)
我认为最好在Document
类中实现insert方法,并在扩展它的类中使用适当的方法覆盖它。然后,只需致电doc.insert();
。
答案 1 :(得分:4)
如果您将来计划添加更多扩展Document的类型并添加更多操作而不仅仅是insert(),我建议实现Visitor设计模式。否则,请遵循Bynyamin Sharet的建议。