継承はアダプターパターンではありません。
あなたの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
オブジェクトを使用できるようになりました。
注:正しく解釈しなかったコメントに一致するようにクラスを更新しました。
アダプターは*デコレーター*のように**あるタイプのクラスを別のクラスに適合させます。たとえば、既存の「車」を取って、それを*能力*に与える(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)。 –
OK私の質問を編集して、あなたが意味することを知っているかどうかを確認しましょう –