Это тот случай, чтобы использовать instanceof? - PullRequest
0 голосов
/ 11 марта 2012

У меня есть класс с именем 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).

Ответы [ 2 ]

8 голосов
/ 11 марта 2012

Я думаю, что было бы лучше реализовать метод вставки в классе Document и переопределить его соответствующими методами в классах, которые его расширяют. Затем просто позвоните doc.insert();.

4 голосов
/ 11 марта 2012

В случае, если в будущем вы планируете добавить больше типов, которые расширяют Document и добавят больше операций, чем просто insert (), я бы предложил реализовать шаблон проектирования Visitor .В противном случае, следуйте советам Биньямина Шаре.

...