なぜList list=new ArrayList()なのか、直接ArrayListを使わないのか

1455 ワード

仕事の时、同僚はこのような问题に出会って、私もただ大体を知っていて、ネット上で探して、これで整理します.
 
    プログラミングはオブジェクト向けにプログラミングされ、具体的なものではなく抽象的な(インタフェース)
    List インタフェース、ArrayListは実装
    Listインタフェースを実現するのはArrayList、LinkedList、Vectorなどがあるので、どちらを使ってもそのままnew インタフェースの実装
    これは1種のとても良い設計モードです.1つのインタフェースは多種の実現があって、このような書き方はjavaが対象に向かう1種の思想で、逆転の原則に依存して、つまり抽象に依存して実現に依存しません(具体的に).
    呼び出し者に提供されるのはインタフェースまたは抽象クラスであり、実装者はインタフェースまたは抽象クラスを実装または継承して呼び出し者を満たすことができ、このように呼び出し者は実装者がどのように操作するかを知る必要がなく、実装者も具体的な状況に応じて実装することができ、このように結合を除去することができる.これがjava設計モデルの基礎思想の一つである.
    Java構文から,この方式はインタフェースリファレンスを用いて具体的な実装を指向し,コード使用の柔軟性を大幅に向上させる.
    たとえば、ArrayListの代わりにLinkedListの実装を希望する場合は、行を変更するだけです. 
    List   list   =   new   LinkedList(); 
    プログラムの他の部分は変更する必要はありません.このように柔軟で、汎用性を失うことはありません.
 
    ただし、後に使うものがすべてArrayListであることが判明した場合は、ArrayListを使用したほうがいいです list = new ArrayList();
ArrayList   list   =   new   ArrayList() 
ArrayListを   リストに変更し、このリストに戻ります 
ではこれから使う悩みは 
if(list   instanceOf   java.util.ArrayList){ 

//do something

} 

else   if(list   instanceOf   java.util.LinkedList){ 

//error

} 

else   if(list   instanceOf   cn.com.bigc.myList){ 

//do;……some   xp   not   defined   in   List 

} 

……


これをifにしたいなら   elseは削除します.では、いくつかのクラスを書かなければなりません.ほほほ、このような代価は価値がありません. 
もしあなたがArrayListを採用することを事前に確定していたら、なぜListで代用するのですか?リストで置き換えると、私のすべての操作は基本的に親が定義しているに違いありません.そうしないと、このような置き換えは、必ずしもお得ではないと思います.