短編小説:郵便局員は家に帰って家に戻り、送付物が書かれた送付状(手紙、書類、小切手、ギフトカード、申請書、ラブレター)を受け取るように求められます。
カバーがなく、郵便配達員に家に帰ってすべてのものを受け取り、他の人に配達するように依頼すると、郵便配達員は混乱する可能性があります。
ですから、カバーで包む方が(私たちの話ではそれはインターフェースです)、彼はうまく仕事をします。
現在、郵便配達員の仕事はカバーのみを受け取り、配達することです(彼はカバーの中に何が入っているか気にしませんでした)。
interface
実際のタイプではなくタイプを作成し、実際のタイプで実装します。
インターフェースを作成することは、コンポーネントが残りのコードに簡単にフィットすることを意味します
例を挙げましょう。
以下のようなAirPlaneインターフェースがあります。
interface Airplane{
parkPlane();
servicePlane();
}
次のようなPlanesのControllerクラスにメソッドがあるとします。
parkPlane(Airplane plane)
そして
servicePlane(Airplane plane)
プログラムに実装されています。コードが壊れることはありません。つまり、として引数を受け入れる限り、変更する必要はありませんAirPlane
。
それは実際のタイプにもかかわらず、すべての飛行機を受け入れますので、flyer
、highflyr
、fighter
、など
また、コレクションでは:
List<Airplane> plane;
//すべての飛行機を利用します。
次の例はあなたの理解を明確にします。
あなたはそれを実装する戦闘機を持っているので、
public class Fighter implements Airplane {
public void parkPlane(){
// Specific implementations for fighter plane to park
}
public void servicePlane(){
// Specific implementatoins for fighter plane to service.
}
}
HighFlyerや他のクラスで同じこと:
public class HighFlyer implements Airplane {
public void parkPlane(){
// Specific implementations for HighFlyer plane to park
}
public void servicePlane(){
// specific implementatoins for HighFlyer plane to service.
}
}
ここで、コントローラークラスをAirPlane
数回使用していると考えます。
以下のように、コントローラークラスがControlPlaneであるとします。
public Class ControlPlane{
AirPlane plane;
// so much method with AirPlane reference are used here...
}
新しいAirPlane
タイプのインスタンスを必要な数だけ作成でき、ControlPlane
クラスのコードを変更しないため、魔法がかかります。
インスタンスを追加できます...
JumboJetPlane // implementing AirPlane interface.
AirBus // implementing AirPlane interface.
以前に作成したタイプのインスタンスも削除できます。