2017-05-03 9 views
0

アダプターのデザインパターンを理解することは、既存のクラスのインターフェースを別のインターフェースとして使用できるようにすることです。クラスを拡張してインターフェイスメソッドを実装するたびにアダプタデザインパターンを使用していますか?

Javaでクラスを拡張または実装するたびに、アダプタパターンを使用していますか?だから、ここのコードはアダプターのデザインパターンを使用していますか?

public class car extends flyingMachine{ 

    void drive(){} 

    @override 
    void fly(){} 

} 

オンラインでパターンに関する情報はたくさんありますが、この質問を私に明確にするものはありません。

+1

アダプターは*デコレーター*のように**あるタイプのクラスを別のクラスに適合させます。たとえば、既存の「車」を取って、それを*能力*に与える(https://s-media-cache-ak0.pinimg.com/originals/e3/2a/92/e32a92e184f7fe457320b476459daeb1) .png)。より良い[例](http://s3.crackedcdn.com/phpimages/article/6/2/5/148625_v1.jpg)。 –

+0

OK私の質問を編集して、あなたが意味することを知っているかどうかを確認しましょう –

答えて

1

継承はアダプターパターンではありません。

あなたのdrive()メソッドにCarがあるとします。実際にはMoveableというインターフェイスを実装する必要があります。方法はdrive()です。今度は、Moveableのパラメータを取る他のクラスがあります。

public class MakeItSo 
{ 
    public void easeOnDown(Moveable thing) 
    { 
     thing.drive(); 
    } 
} 

今度は、あなたが他の誰かが提供するクールな新しいクラスSpaceshipを持っている、そしてそれは方法warp()を持っているとしましょう。 Moveableは実装されていませんが、MakeItSoクラスを使用したいと考えています。何をすべきか?

これは、アダプタパターンが役立つところです。そのような場合には、その実装する新しいクラスを作成(またはそれが拡張することができ、それは多くの場合、非常に混乱している)Moveableインターフェースが、次のとおりです。
- 呼び出すためにdrive()方法をできます - 宇宙船
を使用して構築しますwarp()方法

public class MoveableSpaceship implements Moveable 
{ 
    private Spaceship ship; 

    public MoveableSpaceship(Spaceship s) 
    { 
     ship = s; 
    } 

    @Override 
    public void drive() 
    { 
     ship.warp(); 
    } 
} 

今、あなたは行うことができます。

Spaceship enterprise = getSpaceship(); //from wherever 
MoveableSpaceship ncc1701 = new MoveableSpaceship(enterprise); 
MakeItSo doIt = new MakeItSo(); 
doIt.easeOnDown(ncc1701); 

をので、MakeItSo.easeOnDownはたったの約Moveable、およびを知っていたにもかかわらず、はMoveableを実装していませんでしたが、アダプターパターンを使用して、MakeItSoクラスとアダプターパターンを使用してSpaceshipオブジェクトを使用できるようになりました。

注:正しく解釈しなかったコメントに一致するようにクラスを更新しました。

+0

'MovableSpaceship'がより良い名前になるかもしれません。 – niksofteng

+0

MakeItSoとeaseOnDownメソッドとは何ですか?私の頭が何をしているのですか? –

+0

'MakeItSo'クラスには' easeOnDown(...) 'メソッドがあり、' Moveable'オブジェクトに渡すことができ、( 'Moveable'インターフェースで定義された)' drive() 'メソッドを呼び出します。指定されたパラメータに設定します。ポイントは 'Moveable'インターフェースを実装していない(' 'drive()'メソッドを持っていなかった) '' Spaceship'を、どこでも使えるオブジェクトの型に*適応させることが可能であるということです。移動可能なオブジェクトが必要です。 – KevinO

関連する問題