アダプタモデル
互換性のない2つのインターフェイス間のブリッジとしてのアダプタモード(Adapterパターン)。 デザインパターンのこのタイプは、2つの別々のインタフェースの機能を組み合わせた構造モデルを、属しています。
このモデルは、独立した、または参加する互換性のないインターフェース機能に責任がある単一のクラスが含まれます。 実際の例では、メモリカードリーダーとしての間のアダプタとノートパソコンです。 リーダーにメモリカード、ノートブックへのその後リーダー、メモリカードは、ノートブックを介して読み出すことができますように。
私たちは、以下の実施例によりアダプタモードの使用を示します。 前記オーディオプレーヤーのデバイスのみがより高度なオーディオプレーヤーを使用してVLCとのMP4ファイルを再生するmp3ファイルを再生することができます。
入門
意図:クライアントが期待する別のインターフェイスへのクラスのインタフェースを変換します。Adapterパターンは、それ以外の場合は互換性がないためのインタフェースのこれらのクラスが一緒に働くことができない一緒に動作するようになります。
主に解決するために:ソフトウェアシステムの主なソリューションを、多くの場合、新しい環境への「既存のオブジェクト」、新たな環境要件およびインターフェイスの一部にオブジェクトが満たすことができないようになりました。
使用する時:1、システムは、既存のクラスを使用する必要があり、そのようなインターフェイスは、システムのニーズを満たしていません。2は、クラスはいくつかのクラスのいくつかは、多くのクラスの今後の導入で相互に関連していないと動作する可能性があります含め、のために再利用することができます作成したい、これらのクラスは、必ずしも同じ送信元インターフェイスを持っていません。 3、別のクラスのラインへのインタフェースコンバータ、クラスを通して。 (このような虎包括的な目的は、フライインターフェイスを実装する追加のアダプタ、下需要エンティティを増大させることなく、トラや鳥、タイガーよりも今より、など。)
修正方法:継承や依存性(推奨)。
キーコード:すでに存在しているアダプターの継承や依存オブジェクトは、所望の標的インターフェイスを実現しています。
応用例:1、米国電気110V、中国220Vは、220Vに110Vのアダプタがあるはずです。2は、JAVA JDK 1.1は、あなたが、あなたはAdapterパターンを必要とし、システムが列挙インタフェースIteratorインターフェイスに変換する必要があります前に、1.2 JDKを使用する場合は、Enumerationインタフェースを提供し、1.2にIteratorインターフェイスを提供します。 3、WINDOWS LINUX上でプログラムを実行します。 4、JDBCのJAVA。
利点:1、一緒にランのいずれかの種類が2つの無関係なことができます。2、クラスの再利用性を向上。 3、クラスの透明性を高めます。 4、良好な柔軟性。
短所:1、アダプターの過度の使用、全体を把握するシステムが非常に厄介と困難になります。例えば、呼び出しが明らかにインターフェースを見られ、実際には、これはあまり発生した場合B内部インタフェースシステムとなっている達成するために適合され、災害に等しいです。 それが必要でない場合、あなたは、しかし、直接再構築されたシステムにアダプタを使用することはできませんので。 最もJAVAで2としては、クラスで最高の適応適応になるよう、クラスを継承し、クラスは抽象クラスであるターゲットにする必要があります。
使用シナリオ:システムのインタフェース正常な動作を変更するための動機があるが、あなたはアダプタモードを使用することを検討すべきです。
注:アダプターは、ときに詳細設計追加されませんが、サービスのプロジェクトに問題を解決します。
実現
私たちは、MediaPlayerのインターフェース 、およびエンティティクラスAudioPlayer MediaPlayerのインタフェースの実現を持っています。デフォルトでは、AudioPlayerは、MP3オーディオファイル形式を再生することができます。
また、別のインターフェイスAdvancedMediaPlayerとAdvancedMediaPlayerインターフェイス実装エンティティクラスを持っています。 このクラスは、ファイルのvlcとのMP4形式を再生することができます。
私たちは、AudioPlayerは、他のフォーマットにオーディオファイルを再生したいです。 これを達成するために、我々は、MediaAdapterMediaPlayerのインタフェースを実装するアダプタクラスを作成し、所望のフォーマットを再生するAdvancedMediaPlayerオブジェクトを使用する必要があります。
所望のオーディオタイプを転送MediaAdapterアダプタクラスを使用してAudioPlayerは 、オーディオのニーズを再生することができます実際のクラスのフォーマットを知っている必要はありません。AdapterPatternDemo、様々なフォーマットを再生するAudioPlayerクラスを使用して、私たちのデモクラス。
ステップ1
メディアのためのインタフェースを作成するためのプレーヤーと、より高度なメディアプレーヤー。
MediaPlayer.java
パブリックインターフェイスMediaPlayerの{ 公共ボイドプレイ(文字列audioType、文字列fileNameに); }
AdvancedMediaPlayer.java
パブリックインターフェイスAdvancedMediaPlayer { 公共ボイドplayVlc(文字列filename); 公共ボイドplayMp4(文字列filename); }
ステップ2
AdvancedMediaPlayerインタフェース実現エンティティクラスを作成します。
VlcPlayer.java
パブリッククラスVlcPlayerは{AdvancedMediaPlayerを実装します @Override 公共ボイドplayVlc(文字列filename){ System.out.println( "演奏VLCファイル名:." +ファイル名); } @Override 公共ボイドplayMp4(文字列filename){ //何もしません} }
Mp4Player.java
パブリッククラスMp4Playerは{AdvancedMediaPlayerを実装します @Override 公共ボイドplayVlc(文字列filename){ //何もしません} @Override 公共ボイドplayMp4(文字列filename){ System.out.println( "演奏mp4ファイル名:." +ファイル名); } }
ステップ3
MediaPlayerのクラスは、インタフェースアダプタを実装して作成します。
MediaAdapter.java
パブリッククラスMediaAdapterは{MediaPlayerのを実装します AdvancedMediaPlayer advancedMusicPlayer; 公共MediaAdapter(文字列audioType){ 場合(audioType.equalsIgnoreCase(「VLC」)){ advancedMusicPlayer =新しいVlcPlayer(); }エルス場合(audioType.equalsIgnoreCase( "のMP4")){ advancedMusicPlayer =新しいMp4Player(); } } @Override 公共ボイドプレイ(文字列audioType、文字列filename){ 場合(audioType.equalsIgnoreCase(「VLC」)){ advancedMusicPlayer.playVlc(fileNameに); }エルス場合(audioType.equalsIgnoreCase( "のMP4")){ advancedMusicPlayer.playMp4(fileNameに); } } }
ステップ4
MediaPlayerのインタフェース実現エンティティクラスを作成します。
AudioPlayer.java
パブリッククラスAudioPlayerは{MediaPlayerのを実装します MediaAdapter mediaAdapter; @Override 公共ボイドプレイ(文字列audioType、文字列filename){ // {ビルトインサポート場合(audioType.equalsIgnoreCase(「mp3」))、mp3の音楽ファイルを再生します System.out.println( "演奏mp3ファイル名:." +ファイル名); } // MediaAdapterがあれば、他のサポートされている他のファイル形式を再生提供(audioType.equalsIgnoreCase(「VLC」) || AudioType.equalsIgnoreCase( "のMP4")){ mediaAdapter =新しいMediaAdapter(audioType)。 mediaAdapter.play(audioType、fileNameに); } 他の{ System.out.println( "無効なメディア。" + audioType + "形式はサポートされていません"); } } }
ステップ5
AudioPlayerは、オーディオフォーマットの種類を再生するために使用します。
AdapterPatternDemo.java
パブリッククラスAdapterPatternDemo { 公共の静的な無効メイン(文字列[] args){ AudioPlayer audioPlayer =新しいAudioPlayer(); audioPlayer.play(「horizon.mp3を越えて "" mp3 "、); audioPlayer.play(「MP4」、「alone.mp4 "); audioPlayer.play(「VLC」、「遠くaway.vlc "); audioPlayer.play( "aviファイル"、 "心のme.avi"); } }
ステップ6
出力を確認します。
horizon.mp3向こう:. mp3ファイルの名前を再生 遊ぶmp4ファイル名:. Alone.mp4 VLCファイル名を再生:.遠くaway.vlc 無効なメディア。AVI形式がサポートされていません