2012-03-11 6 views
0

PageまたはImageで拡張できるDocumentというクラスがあります。それぞれにデータベースの挿入メソッドがあります。 PageおよびImageの挿入物は、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

私はあなたの解決策を理解していますが、レイヤー(ビュー、TO、データ、コアなど)をすべて分離しているため、最良の選択肢があるかどうかはわかりません。私がそれを使うと、これはこの組織を破りますが、それはうまくいく方法です。ありがとうございました。 –

4

将来、ドキュメントを拡張し、insert()だけでなく複数の操作を追加する予定の場合は、Visitorデザインパターンを実装することをお勧めします。それ以外の場合は、Bynyamin Sharetの提案に従ってください。

+0

私はこの解決策をより深く研究し、最良の選択肢であるかどうかを確認します。ありがとうございました。 –

+0

私はこのアプローチがより建築的な観点から正しいと思っています。幸運! ;) – aviad

関連する問題