2012-02-11 4 views
12

名前(およびjavadocs)は、MouseAdapterがアダプター(設計パターン)であることを示します。しかし、私はそのようには見ません - それは何にもまったく適応しません。少なくともMouseAdapterはなぜアダプタですか?

MouseAdapterのインスタンスは、次のいずれかの方法に渡すことができます。インターフェイス。したがってMouseMotionListenerが期待されるMouseListenerインスタンスを使用することができます。しかし、「翻訳」は起こっていません。そして、それはGoFのUMLには準拠していません - "クラスアダプタ"バージョンでは、あるメソッドへの呼び出しは、アダプティブからメソッドを呼び出すと予想されます。

ので、アダプタ(デザインパターン)ということである、またはそれが混乱の原因となるランダムな名前だけでしょうか?

答えて

12

MouseAdapterは、Feb 1997でリリースされたJava 1.1ではじめて登場しました。これは、それがいつか1996年に開発されたことを意味します(または1995?)

UML(その案では)completed by 1997ました。

デザインパターンの最初のGoF本はpublished in 1995ました。

アダプターMouseAdapterは、対応するデザインパターンと関係があったとは思いません。あるいは、たとえそれがあったとしても、開発者は統一言語を持たずに、実際の意味を理解することを非常に困難にする設計パターンを表現していました。

5

はい、それは何も適応していないため、GoFのパターンの意味でのアダプタではありません。 [woolf97]抽象クラスパターンのインスタンスと考えることができる。

スーパーデフォルト 又は最小限の実装で完全な実装を提供することができます。

1

他の回答によると、GoFアダプターのパターンではありません。これの主な目的ではなく、他のすべてのメソッドの無意味な空の実装を作成することよりも、MouseAdapterでオーバーライディングだけ所望の方法によって(しばしば単にmouseClicked())をMouseListener(又はMouseMotionListener)を実装することを可能にすることです。したがって、特に匿名のイベントリスナーを使用する場合は、不要なコードが大幅に節約されます。例えば、私はこの質問のために受け入れられた答えはすでに存在している知っているが、これと同じ質問がここに頼まれた

someObject.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      ...//Event listener implementation goes here... 
     } 
    }); 
0

を(hereから撮影):

MouseAdapter: which pattern does it use?

は、より多くのdeatilsのためにそこを参照してください、しかし、 MouseAdapter は、非常に面白いMouseListenerインターフェイスをより使いやすいフォームに変更します。他の回答が示すように、この推論と

+0

問題は、MouseAdapterの状況には、既存のadapteesはありません、です。 GoFアダプターの動機づけ(私はGoFの本を引用しています)は、「時には再利用のために設計されたツールキットクラスは、インターフェースがアプリケーションに必要なドメイン固有のインターフェースと一致しないために再利用できません。 MouseAdapterはマウスイベントをキャプチャするために簡単に適合(カスタマイズ)できるため、*アダプタ*です。 GoFアダプターはあなたが変更できない*レガシークラス*(ツールキット)を持っていると言います。そのため、アプリケーションのニーズに合わせてインターフェースを調整します。 – Fuhrmanator

関連する問題